2016-09-06 10 views
2

laravelの学習を手伝っています。laravelの複数コントローラにまたがって共通の検証機能がある

は私は

class usersController extends Controller 
{ 
/* 
*Store a user in database 
*/ 
function store(){ 
    $input=Request::all(); 

    // create the validation rules ------------------------ 
    $rules = array(
    'name'    => 'required',      // just a normal required validation 
    'lastname'   => 'required',      // just a normal required validation 
    'email'   => 'required|email|unique:users',  // required and must be unique in the users table 
    'password'   => 'required', 

    ); 
    $validationResponse=$this->validateForm($input,$rules); 

    if($validationResponse=="passed"){ 


     $user=new \App\User; 
     $user->name=$input['name']; 
     $user->email=$input['email']; 
     $user->lastname=$input['lastname']; 
     $user->password=\Hash::make($input['password']); 
     $user->userlevel=isset($input['isAdmin'])?1:0; 
     $user->save(); 

     return redirect('users'); 
} 
else{ 
     return Redirect::to('users/create') 
     ->withErrors($validationResponse)->withInput(); 


    } 


    } 

/* 
*validate user form input 
*/ 
function validateForm($input,$rules){ 

     // do the validation ---------------------------------- 
     // validate against the inputs from our form 
     $validator = Validator::make($input, $rules); 

     // check if the validator failed ----------------------- 
     if ($validator->fails()) { 

      // get the error messages from the validator 
      $messages = $validator->messages(); 

      return $messages; 
     } 
     else{ 
      return 'passed'; 
     } 
    } 
} 

ように、UserControllerにある状態ストア機能は、基本的にフォームからの入力を検証validateFormと呼ばれる別の関数を呼び出す

Route::post('users/add','[email protected]')->middleware('admin'); 

この経路に投稿するユーザーフォームを有します今これはuserControllerからのアクセスには問題ありませんが、別のコントローラにprojectsControllerと言うと、同じ関数、つまりvalidateFormにアクセスしたい場合はどうですか?

どこにこの共通の機能を置いて、どのコントローラからどのようにアクセスできますか?これに対する答えに建て

答えて

0

LaravelはForm Request

ちょうどphp artisan make:request UserCheckを使用してフォームのリクエストを作成し、この方法rules

/** 
* Get the validation rules that apply to the request. 
* 
* @return array 
*/ 

public function rules() { 
    return [ 
     'name'    => 'required',      // just a normal required validation 
     'lastname'   => 'required',      // just a normal required validation 
     'email'   => 'required|email|unique:users',  // required and must be unique in the users table 
     'password'   => 'required', 

    ]; } 

であなたの検証ルールに入れ、

/* 
* Store a user in database 
*/ 
public function store(UserCheck $request) 
{ 
    // The incoming request is valid... 
} 
それを呼び出すです
関連する問題