sim-vzla/laracruds

Laravel框架的仓库模式辅助类

v1.1 2016-02-12 15:49 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:47:28 UTC


README

Build Status

##Laracruds ####Laravel框架的仓库模式助手和验证器

此包可以帮助您在编写eloquent模型的CRUD时更加高效,为您提供一组简单而强大的工具。

#####安装

composer require sim-vzla/laracruds

然后在config/app.php中的提供者数组中添加

Laracruds\LaracrudsServiceProvider::class

使用

php artisan vendor:publish --provider="Laracruds\LaracrudsServiceProvider"

#####使用 假设您想创建一个User模型仓库。那么,只需扩展包的基础仓库类

	<?php

	namespace App\Repositories;

	use Laracruds\EloquentRepository as BaseRepository;

	use App\User;

	class UserRepository extends BaseRepository
	{
		public function __construct()
		{
			parent::__construct(new User);
		}
	}

此类为您提供一些CRUD方法

  • create($data)

  • findById($id)

  • update($model, $data)

  • deleteById($id)

  • batchDelete($idArray)

您可以在API参考中找到更多关于它们的信息。

到目前为止,一切都很标准,但接下来是魔法所在

EloquentRepository类接受一个可选的第二个参数,该参数期望一个Laracruds\BaseValidator实例,用于在创建和更新方法中验证数据。但如果您不提供,则该类将使用模型类名并尝试在配置文件中找到它。

所以,如果您向EloquentRepository构造函数传递App\User的实例,则该类将假设在`App\Helpers\Validators`文件夹中存在一个UserValidator

#####验证

验证类看起来像这样

	<?php

	namespace App\Helpers\Validators;

	use Laracruds\BaseValidator;

	class UserValidator extends BaseValidator
	{
	    public function rules($id)
	    {
	        return [
	            'email' => 'required|email|unique:users,email,'.$id,
	            'password' => 'required|min:6'
	        ];
	    }
	}

您只需在rules()方法中放置要应用的自定义规则(来自Laravel默认提供的规则),Laracruds将在需要时使用它们。

但我们想能够使用相同的规则数组进行创建和更新。因此,我们面临的问题是需要和唯一规则...别担心...我们已为您解决了这个问题:当在更新方法中调用BaseValidator类的validate()方法时,所有required规则都会从数组中动态删除,只需确保将其作为第一个规则声明在键中即可。

'email' => 'required|email',
'name' => 'required|string'

为了避免在更新时使用唯一规则,只需将rules()函数接收到的自动接收到的$id参数附加到数组键的末尾。只需确保将唯一规则放置在键的末尾即可

	public function rules($id)
    {
        return [
            'email' => 'required|email|unique:users,email,'.$id,
            'password' => 'required|min:6'
        ];
    }

要获取验证错误,请使用getValidator()方法从仓库类检索验证器

$validator = $repository->getValidator()

然后调用errors方法

$validator->errors();