mhamzeh/presenter-filter

0.1 2020-12-12 13:16 UTC

This package is auto-updated.

Last update: 2024-09-16 20:46:58 UTC


README

介绍

该包允许你创建两种类型的类:过滤器类和展示者类

过滤器

此包允许你通过查询字符串轻松处理数据库过滤。

示例:/users?status=1&name='kami'

展示者

有时我们的模型会变得过于庞大,这会使我们的开发变得非常困难。在这种情况下,我们使用一个具有相同功能并且作为第二个模型使用的第二个类,并将Harrow方法包含在这个类中。

安装

您可以通过Composer安装此包。

composer require mhamzeh/presenter-filter

您必须通过以下Artisan命令发布配置:php artisan vendor:publish

使用方法

您可以使用两个命令,并使用它们来创建自己的过滤器和展示者类

make:filter命令

您可以使用以下命令创建新的过滤器。

php artisan make:filter UserFilter

这将创建一个新的过滤器,位于app/Filters目录下。

选项

1-您可以将模型添加到命令中

php artisan make:filter UserFilter --model=User

默认使用模型文件夹,如果您在其他位置保存了模型,请更改此文件夹的config Modules

make:presenter命令

您可以使用以下命令创建新的展示者

php artisan make:presenter UserPresenter

选项

1-您可以将模型添加到命令中

php artisan make:presenter UserPresenter --model=User

带有过滤器的示例

假设您想在User模型上使用filterable。您需要创建过滤器类App/Filters/PostFilter.php(《php artisan make:filter PostFilter --model=Post》)

如果您使用--model选项,filterable将直接添加到模型中

<?php
namespace App\Filters;

use mhamzeh\packageFp\Filters\contracts\QueryFilter;

class UserFilter extends QueryFilter
{
    public function name($value){
        return $this->builder->where('name','LIKE',"%$value%");        
    }
}

现在,如果您没有使用--model选项,您需要将局部作用域添加到您的模型中

use mhamzeh\packageFp\Filters\contracts\Filterable;
...
class User extends Model
{
    use Filterable;
    ...
}

最后,像这样在控制器中调用作用域

use App\Filters\UserFilter;
...
public function index()
{
    return User::filters(new UserFilter())->paginate();
}

带有展示者的示例

假设您想在User模型上使用Presentable并引入展示者类。您需要创建展示者类App/Presenter/UserPresenter.php(《php artisan make:presenter UserPresenter --model=User》)

如果您使用--model选项,Presentable和展示者类将直接添加到模型中

<?php
namespace App\Presenter;

use mhamzeh\packageFp\Presenter\Contracts\Presenter;

class UserPresenter extends Presenter
{
    public function full_name(){
         return $this->entity->name ." ".$this->entity->full_name;        
    }
}

现在,如果您没有使用--model选项,您需要将局部作用域添加到您的模型中

use mhamzeh\packageFp\Presenter\Contracts\Presentable;
...
class User extends Model
{
    use Presentable;
    protected $presenter = UserPresenter::class;

    ...
}

最后,您可以在Blade或API资源或控制器中使用此方法,例如Blade

 @foreach($users as $user)
     <div>
          <p>fullname : $user->present()->full_name </p>
      </div>
 @endforeach

在Api Resources中

class UserResource extends JsonResource
{
   /**
    * Transform the resource into an array.
    *
    * @param \Illuminate\Http\Request $request
    * @return array
    */
   public function toArray($request)
   {
       return [
            'id'=>$this->id,
            'full_name'=> $this->present()->full_name,
            'email'=>$this->email
        ];
   }
}