前端笔记

分享前端开发思考与感悟

Laravel雄辩过滤器

您是否曾经遇到过将大量参数发送到API的情况?您必须基于它们创建大量查询吗?如果您的回答是肯定的,请不要停止阅读!

首先,如果您以前从未阅读过有关口才过滤器的这篇文章,强烈建议您看一下。在上述文章中,您将学习如何为Eloquent模型制作高级查询过滤器。

另外,您可能需要安全的过滤器。安全过滤器将授权用户应用给定的过滤器,您可以在此处找到相关文章。

现在,如果您的Laravel项目未遵循默认目录结构怎么办?

按域/模块定义过滤器

在一个小的Laravel项目中,您可以使用默认架构(MVC)及其相应的目录结构,如下所示:

.
├── app
│   ├── Console
├── EloquentFilters // Default directory for filters
│   └── Product
│       ├── PriceMoreThanFilter.php
│   └── User
│       ├── AgeMoreThanFilter.php
│       └── GenderFilter.php
└── Exceptions
│   ├── Http
│   │   ├── Controllers
│   │   ├── Middleware
│   │   └── Requests
│   └── Providers
├── bootstrap
├── config
├── database
├── public
├── resources
├── routes
├── storage

您可以像这样使用EloquentBuilder

<?php
使用 EloquentBuilder ;
使用 App \ User ;
使用 App \ Product ;
$ users = EloquentBuilder :: to(User :: class,request()-> 过滤器-> get();

但是,当您的项目随着时间增长时,默认结构是不够的。最终,此问题导致您使用其他体系结构(即Domain-Driven-DesginHMVC …)或修改当前体系结构。因此改变目录结构是不可避免的。看一下这个:

.
├── app
├── bootstrap
├── config
├── database
├── Domains
│   ├── Product
│   │   ├── database
│   │   │   └── migrations
│   │   ├── src
│   │       ├── Filters //Custom directory for Product model filters
│   │       │   └── PriceMoreThanFilter.php
│   │       ├── Entities
│   │       ├── Http
│   │          └── Controllers
│   │       ├── routes
│   │       └── Services
│   ├── User
│   │   ├── database
│   │   │   └── migrations
│   │   ├── src
│   │       ├── Filters //Custom directory for User model filters
│   │       │   └── AgeMoreThanFilter.php
│   │       ├── Entities
│   │       ├── Http
│   │          └── Controllers
│   │       ├── routes
│   │       └── Services
...

在本周,EloquentBuilder v2.0已发布。在此版本setFilterNamespace中,软件包中添加了一种新方法,可让您通过设置动态的过滤器名称空间来“按域/模块”创建自定义过滤器。

现在,我们可以为每个模型使用过滤器,如下所示:

<?php
使用 EloquentBuilder ;
使用 Domains \ Entities \ User ;
$ users = EloquentBuilder :: setFilterNamespace( Domains \\ User \\ Filters
-> to(用户:: ,request()-> 过滤器
-> get();

结论

处理API传入参数是一项繁琐的工作,因此从黑盒程序包中获取帮助可以帮助您处理它们,而无需担心和复杂。此外,现在有可能在具有不同结构的大型项目中使用此优势。

特别感谢50bhan的出色宣传:

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注