В Laravel 4, Как реализованы наборы правил слияния?

Я использую 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 (): первый аргумент должен быть либо строкой, либо целым числом

Любые предложения о том, как я бы реализовать объединение наборов правил?

0

Решение

Из того, что я вижу — mergeRulesets() возвращает массив правил.

Так что, если вы сделаете это — это может сработать:

$post = new Post(Input::all());
$post->setRules($post->mergeRulesets('set_up_all', 'set_up_property_room', 'set_up_property'));
if($post->isValid()) {
///
}
1

Другие решения

Я выпустил обновленную версию пакета для Laravel 4.2 (0.10.7) который теперь позволяет передавать свои правила isValid() метод проверки против них.

$post->isValid($mergedRules);

Другие ответы будут работать, но этот синтаксис лучше (и не будет переопределять существующие правила в модели).

1

По вопросам рекламы [email protected]