How to validate in model in Laravel 5?


How to validate in model in Laravel 5?

我是Laravel的新手。现在我开始使用Laravel 5开发一个项目。我以前一直在使用CodeIgniter。我的验证类有问题,与我想做的不兼容。

通常,我们在Controller中这样验证。

    public function postCreate(Request $request)
    {
        $this->validate($request, [
            'name' => 'required|max:30',
            'mm_name' => 'required|max:50',
        ]);
        echo "passed";
    }

这是一个有效的发现。但我想做的是将验证逻辑转移到模型中。所以我在应用程序文件夹下创建了一个名为Models的新文件夹。在Models文件夹下,我创建了一个名为ValidationHelper的类,它扩展了Model类。

这是我的验证助手类

<?php namespace App'Models;
use Illuminate'Database'Eloquent'Model;
use DB;
class ValidationHelper extends Model{
    function CreateCategory($request)
    {
        $this->validate($request, [
            'name' => 'required|max:30',
            'mm_name' => 'required|max:50',
        ]);
    }   
}

所以现在我尝试使用构造函数依赖注入将该类导入到我的控制器中。现在我的控制器是这样的。

namespace App'Http'Controllers;
use Illuminate'Http'Request;
use App'Http'Requests;
use App'Http'Controllers'Controller;
use App'Models'ValidationHelper;
class CategoryController extends Controller
{
    protected $validationHelper;
    function __construct(ValidationHelper $v_helper)
    {
        $this->validationHelper = $v_helper;
    }
    /**
     * Display a listing of the resource.
     *
     * @return 'Illuminate'Http'Response
     */
    public function categoryList()
    {
        //
        return View('admin.Category.list');
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return 'Illuminate'Http'Response
     */
    public function create()
    {
        //
        return View('admin.Category.create');
    }
}

所以当我运行我的应用程序并进行验证时,它会给我这个错误。我怎么能在Laravel做到这一点?如何将我的验证逻辑与模型分离?

您可以通过注册模型事件来移动模型中的代码,如下所示:

// For example, User.php model
public static function boot()
{
    parent::boot();
    static::creating(function($user)
    {
        if (!$user->isValid()) return false;
    }
}

如果将这个boot方法放在User.php模型中,那么无论何时创建新用户,验证都将首先进行。为此,您必须在模型中创建isValid方法,在该方法中您将自己检查验证,并根据验证结果返回true/false。如果返回false,则创建将被中断。这只是一个想法,但你可以在这里阅读更多关于模型事件的内容。