sectheater / artify
缺失的 Laravel Artisan 命令
README
由 SecTheater 基金会用❤️制作
Artify 快速参考将很快可用
Laravel 是一个优秀的框架,它为我们提供了创建自定义 artisan 命令的能力,所以为什么不拥有几个能让你的应用程序开发更容易的命令呢。
如果你有任何关于新命令的灵感,或者你做了一些常规的事情并且想要一个命令,请毫不犹豫。
Artify 关心你应用中应该拥有的命令,目前,它提供了以下命令来帮助你创建 Laravel 到现在还没有提供命令的文件,例如 Repositories、Observers、Responsable Interface、facades 等..
安装步骤
1. 需求包
创建你的新 Laravel 应用程序后,你可以使用以下命令包含 Artify 包
composer require sectheater/artify:dev-master
如果你的 Laravel 版本是 5.5+,则不需要注册 ArtifyServiceProvider,因为它会自动被发现,除非你需要手动在 config/app.php 中注册它
"providers" => [
// other providers
Artify\Artify\ArtifyServiceProvider::class
]
2. 添加数据库凭证和 APP_URL
接下来,请确保创建一个新的数据库,并将数据库凭证添加到你的 .env 文件中
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
3. 准备你的环境。
只需运行以下命令。
php artisan artify:install -c 20
命令解释
1- 它发布了角色的迁移、种子和 artify 将使用的配置文件。
2- "-c" 代表缓存,表示是否启用,20 代表缓存的时间(分钟)。
如果你不希望启用缓存,只需删除 -c 和数字即可
php artisan artify:install
它将询问角色模型和权限列,artify 将在生成与角色相关的文件时处理这些列。
Artify 允许你在 config/artify.php 中设置自定义命名空间和自定义用户模型
现在一切都已设置,让我们深入了解命令。
4. Artify 覆盖的命令。
4.1 创建一个观察者
观察者通常用于观察特定 eloquent 事件。事件发生时,观察者被触发,你可以在这里阅读关于它的文档:文档。
// ? means optional. // php artisan artify:observer <name of Observer> <-m?> <-p?> // creates a model for this observer in case the model doesn't exist // registering on the provider is always set to true, if you don't want to register the observer just type "-p" php artisan artify:observer PostObserver -m
此命令将在你的 App/Observers 中生成一个名为 PostObserver 的观察者文件。现在的方法具有 Post 模型作为参数传递,创建观察者时(这些方法不会包含在此文件中)创建和更新了忽略的方法。
4.2 创建一个 Responsable 接口
Responsable 接口是 Laravel 5.5 的一个特性,你应该使用它来使控制器更简洁,你可以在这里找到一个关于它的教程:教程。
php artisan artify:response <name> // Example , please try to follow the convention of naming.. <model><method>Response php artisan artify:response PostShowResponse
此命令将创建一个名为你附加的文件名的新文件,位于 App/Responses 下
4.3 同步你的角色表与策略和门
此命令负责将数据库中的可用角色转换为策略和门
建议遵循 Roles 表 Seeder 中提到的角色命名约定
Artify 还为你提供了角色的迁移,如果你要更改权限列,不要忘记在配置文件中更新它
权限列应该是数组,如果它们在你的数据库中是 jsonb 类型,则使用访问器、观察者或使用 casts 属性将权限转换为数组
// Role Model protected $casts = ["permissions" => "array"];
默认情况下,此命令需要 hasRole 方法(它应返回布尔值),您可以在用户模型中创建自定义方法,或者直接导入 Roles 特性。
use Artify\Artify\Traits\Roles\Roles;
Class User Extends Model {
use Roles;
}
此方法用于检查用户是否有特定的角色来访问某处,它用于网关中。您可以根据需要更改网关的逻辑。
php artisan artify:register-authorization
通过执行此命令,您可以在路由文件中的任何地方使用 can 中间件。
Route::get("/post/create","PostController@create")->middleware("can:create-post");
您还可以在任何地方访问 can 方法。
if($user->can("create-post")) // do something
4.4 将用户分配到特定的等级。
此命令仅用于在您手动通过数据库将用户分配到特定角色时节省几分钟时间。
php artisan artify:assign <username> <slug> // Example : php artisan artify:assign Alex admin
4.5 创建一个仓库。
仓库模式是一个非常强大的模式,您应该使用它来将逻辑与数据库层(模型)分离,并使模型更简洁。
php artisan artify:repository <name of repo> (-m?) (-f?) // -m stands for the model associated with the repository. // -f create a facade for this repository, so you can call it immediately , i.e you can just do that anywhere "\MyRepository::method();"
4.6 生成门面。
php artisan artify:facade <name>
4.7 生成 CRUD。
这个艺术工具真的很强大,可以为您节省多达20分钟的时间,它可以帮助您生成以下内容:
- 模型
- 带有您在方法中通常执行的方法的通用逻辑的资源控制器。
- 用于存储和更新方法的请求表单文件。
- 资源路由在您的网页文件中。
- 如果启用了仓库选项,它将为您创建与模型关联的仓库。
php artisan artify:crud <model-name> (-r?) // -r is optional , it will generate you the repository.
4.8 ADR 安装
您可能听说过 ADR 模式,artify 支持此模式,它是 MVC 的替代品,我们认为它更好。如果您还不太了解它,我们建议您从这里开始链接,如果您是教程爱好者,可以查看这个课程。
此命令实际上通过发布 App/App 目录中的 adr 标准,设置了环境,如果还没有创建该目录,则会创建。
php artisan adr:install
4.9 ADR 生成
此命令功能强大,它提供了各种选项,包括
- 创建模型、迁移、仓库、工厂 "-m"
- 创建资源 "-c"
- 创建响应者 "-r"
- 创建操作 "-a"
- 创建服务 "-s"
- 创建所有内容 "-A"
让我们从基础开始。
php artisan adr:generate Addresses IndexAddress -sra
这将为您在 app 目录下创建一个 Addresses 文件夹,其结构如下
├── App
├── Addresses
│ ├── Actions
│ │ ├── IndexAddressAction.php
│ ├── Domain
│ | ├── Services
| | ├── IndexAdressService.php
│ ├── Responders
│ | ├── IndexAddressResponder
└── ...
这本质上为您创建了 Action、Service、Responder。
您还可以创建与仓库和迁移关联的模型。
php artisan adr:generate Addresses -m
请注意,在这种情况下传递的文件名将被忽略,因为域只是我们当前的主要关注点。无论如何,这将为您生成仓库、模型、迁移和工厂。
您还可以使用 -c 选项为此域创建资源。
php artisan adr:generate Addresses -c
您还可以使用 -A 选项一次性创建所有这些。
php artisan adr:generate Videos IndexVideo -A
这将为您创建响应者、操作和域组件。
请注意,操作、响应者、服务将只包含 IndexVideo 文件,要创建其他文件,请再次使用命令并提及它们的名称。
5.0 角色 trait
此 trait 用于处理 artify 命令的授权过程,但您也可以自由地将其用于自己的目的。它包含一些非常有用的方法,可以帮助您在应用程序的任何地方处理授权。让我们深入了解这些方法。
此 Trait 支持在您的角色表和用户表中检查角色(为用户分配的次要权限)。
授权方法。
1.0 hasRole 方法
此方法只接受一个参数,该参数应为字符串,字符串应与用户表或角色表中的权限列内的角色名称匹配。
$user = \App\User::first(); dd($user->hasRole("create-post")); // if the current logged in user has the ability to "create-post", it will return true
该方法将在角色表或用户表内搜索与用户关联的权限。
2.0 版 hasAnyRole 方法
我想你已经猜到了这里发生的事情,它会搜索你传递的所有角色,并在用户可能拥有的第一个角色上返回 true。
dd($user->hasAnyRole(["create-post","foo-bar","approve-post"])); // returns true/false;
3.0 版 hasAllRole 方法
此方法接受一个参数,它应是一个数组,包含你正在检查的权限。
此方法检查所有传递的角色,用户是否拥有它们所有。dd($user->hasAllRole(["foo-bar","upgrade-user"])); // returns true/false;
3.0 版 inRole 方法
此方法检查用户等级是否通常等于传递的参数。
表示角色表中权限的缩略名。 - 返回布尔值dd($user->inRole("admin"); // This slug exists within the seeder
权限处理方法。
权限仅分配给当前正在处理的用户。即你可以通过找到他/她或获取认证用户来处理他/她的权限。
1.0 添加权限
此方法接受两个参数,分别是权限和布尔值。
- 权限可以是字符串或数组。 - 布尔值表示用户执行指定权限的能力。 - 返回布尔值。$user->addPermission("create-custom-post"); // second parameter is set to true by default, so the added permission is available for this user. $user->addPermission("create-something",false) // the user isn\'t allowed to "create-something" now. $user->addPermission(["create-something" => true , "can-push-code" => false]) /* you don\'t need the second parameter now as the key and value of this array is going to be in charge of handling the permissions. */
2.0 更新权限
此方法接受三个参数
- 权限,应为字符串。 - 布尔值表示用户执行指定权限的能力。 - 布尔值,表示如果权限不存在则创建权限。 - 返回布尔值。$user->updatePermission("create-post"); // this will update the permission to set it to true. $user->updatePermission("create-post",false); // this will update the permission to set it to false $user->updatePermission("foo-bar",false,true); // this will create the permission if it doesn\'t exist and set it to false.
3.0 移除权限
此方法只接受一个参数,表示权限
- 可以传递多个权限作为单独的参数。 - 返回布尔值如果权限未设置,则抛出异常。
$user->removePermission("create-post"); // returns boolean $user->removePermission("create-post","delete-post","whatever-role",...); // returns boolean
有关更多信息,请参阅以下文章:[medium]:https://medium.com/@secmuhammed/the-missing-laravel-commands-have-arrived-e0db7092cf07