如何在 Laravel 5 中验证模型?

Posted

技术标签:

【中文标题】如何在 Laravel 5 中验证模型?【英文标题】:How to validate in model in Laravel 5? 【发布时间】:2015-12-12 05:53:09 【问题描述】:

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

通常我们像这样在 Controller 中进行验证。

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

        echo "passed";
    

这是有效的查找。但我想要做的是我想将该验证逻辑移动到模型中。所以我在 app 文件夹下创建了一个名为 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 中做到这一点?如何将我的验证逻辑与模型分离?

【问题讨论】:

介意告诉我错误是什么? 在模型中移动验证逻辑而不是移动到它自己的特定类的原因是什么? 原因是我希望我的代码遵循 SOLID 规则。特别是单一的resposiblity.Cause in asp.net mvc ,我可以很容易地实现它。 【参考方案1】:

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

// For example, User.php model
public static function boot()

    parent::boot();

    static::creating(function($user)
    
        if (!$user->isValid()) return false;
    

如果你把这个boot 方法放在你的User.php 模型中,那么每当你创建一个新用户时,首先会进行验证。为此,您必须在模型中创建 isValid 方法,您将在其中自行检查验证并根据验证结果返回真/假。如果您返回 false,则创建将被中断。这只是一个想法,但您可以 read more here 了解模型事件。

【讨论】:

这仅适用于雄辩的实体吗? 是的,仅适用于Eloquent 在这种情况下创建操作。

以上是关于如何在 Laravel 5 中验证模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5 中模拟模型上的 create 方法?

如何在 laravel 5.2 中使用多重身份验证 [关闭]

如何在 laravel 5.5 中获取验证消息

如何在 Laravel 5 中验证 RESTful API?

在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则

如何在 laravel 5.4.24 中验证 slug