Вам нужно дать имя вашему полю выбора ( в вашем случае это профессия, я думаю ), затем использовать правила валидации, как показано ниже
// Validation rules ...
$rules = [
...
'occupation' => 'required',
...
];
Необходимо реализовать собственный IUserType.
Посмотрите это сообщение в блоге для деталей. Я также вставлю соответствующий раздел ниже в случае, если блог исчезает.
В NHibernate пользовательский тип отображения является классом, который происходит или из интерфейсов IUserType или из ICompositeUserType. Эти интерфейсы содержат несколько методов, которые должны быть реализованы, но в наших целях здесь, мы собираемся сфокусироваться на 2 из них. Рассмотрите следующее.
public class TypeClassUserType : IUserType
{
object IUserType.NullSafeGet(IDataReader rs,
string[] names,
object owner) {
string name = NHibernateUtil.String.NullSafeGet(rs,
names[0]) as string;
TypeClassFactory factory = new TypeClassFactory();
TypeClass typeobj = factory.GetTypeClass(name);
return typeobj;
}
void IUserType.NullSafeSet(IDbCommand cmd,
object value,
int index) {
string name = ((TypeClass)value).Name;
NHibernateUtil.String.NullSafeSet(cmd, name, index);
}
}
Создав этот класс, я могу теперь явно отобразить ассоциацию между ActualClass и TypeClass как простое свойство на отображении ActualClass.
<property
name="Type"
column="TypeName"
type="Samples.NHibernate.DataAccess.TypeClassUserType,
Samples.NHibernate.DataAccess" />
Поскольку NHibernate находится в процессе сохранения экземпляра ActualType, это загрузит и создаст новый экземпляр TypeClassUserType и назовет метод NullSafeSet. Как Вы видите от тела метода, я просто извлекаю имя из отображенного свойства (передал в как параметр, передаваемый по значению), и определение извлеченного имени как значение параметра, который будет установлен в базе данных. Конечный результат состоит в том, что, хотя свойством Type ActualClass является TypeClass в модели предметной области, только свойство Name объекта TypeClass хранится в базе данных. Обратное также верно. Когда NHibernate загружает экземпляр ActualType от базы данных и находок свойство моего пользовательского типа отображения, это загружает мой пользовательский тип и называет метод NullSafeGet. Как Вы видите, мой метод завоевывает репутацию от возвращенных данных, называет мою фабрику в наилегчайшем весе для получения корректного экземпляра TypeClass и затем на самом деле возвращает тот экземпляр. Процесс разрешения типа происходит прозрачно с моими классами доступа к данным (и даже с самим NHibernate в этом отношении).