我是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,则创建将被中断。这只是一个想法,但你可以在这里阅读更多关于模型事件的内容。