Laravel アプリケーションでArdentを使用してレコードの検証を行っています。Ardent は$rules
モデル内で静的変数を使用して、次のように検証情報を保存します。
class Project extends Ardent{
public static $rules = array
(
'name' => 'required|max:40',
'project_key' => 'required|max:10|unique:projects',
);
}
Ardent はすべての保存イベントでこれらと同じルールを使用しますが、unique:projects
ルールは現在のレコードに対して検証されないように、レコードの更新時に 3 番目のパラメーターを必要とします。私は通常、コントローラーでこれを次のように行います。
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;
...
}
...
static をどのように更新します$rules
か?コントローラーでそうするのではなく、モデルイベントで何かをする必要がありますか、それとも検証前に一意の制約を更新する方法が不足していますか?