php - 在 laravel 中具有跨多个 Controller 的通用验证功能

标签 php model-view-controller laravel-5

尝试学习 laravel。

我有一个发布到这条路线的用户表单

Route::post('users/add','usersController@store')->middleware('admin');

usersController 中的存储函数调用另一个名为 validateForm 的函数,它基本上验证来自表单的输入,就像这样

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 访问没问题,但是如果我有另一个 Controller 说 projectsController 并且我想访问相同的功能,即 validateForm

我应该把这个通用函数放在哪里,我如何从任何 Controller 访问它?

最佳答案

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...
}

关于php - 在 laravel 中具有跨多个 Controller 的通用验证功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339713/

相关文章:

objective-c - Xcode - 这是 MVC 吗?

asp.net-mvc - EntityFramework SaveChanges() 抛出并发事务错误

php - 在 PHP 中,是否可以对对象执行 "var_dump"而不包括设置为其属性的对象转储?

php - 如何将值插入联结表?

java - 在 View 中有条件地呈现 HTML 的简洁方法?

php - 如何在laravel 5.2中为连接表执行sql计数功能

php - Laravel Nova Card 指标自动更新,无需刷新页面

php - Laravel 5.2 Socialite 检索空电子邮件

php - 谁能解释为什么 strtotime ('cast' ) 返回一个值?

php - Laravel 表单 - 路由未定义