Проверка уникальных ограничений в Laravel с использованием пакета проверки Ardent

я использую пылкий в моем приложении Laravel, чтобы обеспечить проверку записи. Ardent использует статический $rules переменная в вашей модели для хранения информации о проверке, например, так:

class Project extends Ardent{

public static $rules = array
(
'name'        => 'required|max:40',
'project_key' => 'required|max:10|unique:projects',
);

}

Ardent будет использовать эти же правила для любого события сохранения, однако unique:projects Правило требует третьего параметра при обновлении записи, чтобы оно не проверялось по текущей записи. Я обычно делал бы это в моем контроллере так:

class ProjectController{

...

public function update( $id ){

$record = $this->projects->findById($id);
$record::$rules['project_key'] += ',' . $record->id;
if( $record->update(Input::get(array('name','project_key'))) )
{
...
}
return Redirect::back()
->withErrors( $record->errors() );
}

...

}

Чтобы сократить количество дублирующегося кода, я переместил код для определения, существует ли запись, и обработки ошибок, когда ее нет, в другой метод класса, который устанавливает $this->project к текущему проекту, но теперь обновляет статические модели $rules свойство проблематично, потому что ниже не может работать:

...

public function update( $id ){

if ( ! $this->identifyProject( $id ) ){
return $this->redirectOnError;
}

$this->project::$rules['project_key'] += ',' . $this->project->id;

...

}

...

Как бы вы пошли об обновлении статического $rules? Должен ли я вместо того, чтобы делать это в контроллере, делать что-то с модельным событием или мне не хватает метода, который мне не хватает, который обновляет уникальные ограничения перед проверкой?

-1

Решение

Похоже, что в моем вопросе я упустил из виду тот факт, что updateUniques метод, который должен использоваться вместо update когда у вас есть уникальные ограничения в ваших правилах. Поэтому мой пример исходного кода становится:

class ProjectController{

...

public function update( $id ){

if ( ! $this->identifyProject( $id ) ){
return $this->redirectOnError;
}

$this->project->fill(Input::only(array('name','project_key')));

if( $this->project->updateUniques() )
{
return Redirect::route('project.edit', $this->project->id)
->with('success', 'Your changes have been saved.');
}
return Redirect::back()
->withErrors( $this->project->errors() );
}

...

}
1

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector