如何在 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 中验证 RESTful API?