Я использую dwightwatson / Validating пакет для создания правил проверки в модели.
Мне особенно нравятся настраиваемые наборы правил, которые вы можете создавать для разных маршрутов.
модель
protected $rulesets = [
'set_up_all' => [
'headline' => 'required|max:100',
'description' => 'required'
],
'set_up_property' => [
'pets' => 'required'
],
'set_up_room' => [
'residents_gender' => 'required',
'residents_smoker' => 'required'
],
'set_up_roommate' => [
'personal_gender' => 'required',
'personal_smoker' => 'required'
]
];
контроллер
$post = new Post(Input::all());
if($post->isValid('set_up_all', false)) {
return 'It passed validation';
} else {
return 'It failed validation';
}
В приведенном выше примере это хорошо работает при проверке set_up_all Набор правил. Теперь я хотел бы объединить несколько наборов правил и проверить их все вместе.
Согласно документации, пакет предлагает способ объединить наборы правил. Я просто не могу понять, как интегрировать предоставленный пример в мой текущий поток.
Согласно документации, мне нужно реализовать эту строку:
$mergedRules = $post->mergeRulesets('set_up_all', 'set_up_property_room', 'set_up_property');
Это была моя попытка, но она не сработала:
if($mergedRules->isValid()) { ...
Я получаю следующую ошибку:
Вызов функции-члена isValid () для массива
Я тоже попробовал это, но это тоже не сработало:
if($post->isValid($mergedRules)) { ...
Я получаю следующую ошибку:
array_key_exists (): первый аргумент должен быть либо строкой, либо целым числом
Любые предложения о том, как я бы реализовать объединение наборов правил?
Из того, что я вижу — mergeRulesets()
возвращает массив правил.
Так что, если вы сделаете это — это может сработать:
$post = new Post(Input::all());
$post->setRules($post->mergeRulesets('set_up_all', 'set_up_property_room', 'set_up_property'));
if($post->isValid()) {
///
}
Я выпустил обновленную версию пакета для Laravel 4.2 (0.10.7
) который теперь позволяет передавать свои правила isValid()
метод проверки против них.
$post->isValid($mergedRules);
Другие ответы будут работать, но этот синтаксис лучше (и не будет переопределять существующие правила в модели).