Laravel 用 vendor:publish 添加门
Laravel adding Gate with vendor:publish
所以我正在开发一个 composer 包,它将我的几个可重用代码添加到一个新的 Laravel 项目中。到目前为止,我已经在我的 boot()
方法中使用 $this->publishes()
和 $this->loadRoutesFrom()
在我的服务提供商中添加了核心翻译文件和一些模型、路由。
现在我想将 Gates 添加到那个包中,但我被卡住了。我应该以某种方式在 运行 上的项目 AuthServiceProvider
中注册这些。如果有人能给我一些如何执行此任务的建议,那就太好了。
如果要注册策略,不需要使用AuthServiceProvider,直接使用Illuminate\Support\Facades\Gate::policy($key, $value)
.
即可
您可以在自己的包的 ServiceProvider 中执行此操作。如果你想定义能力,你可以像这样添加一个boot
方法:
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
// ...
public function boot(GateContract $gate)
{
$gate->define('update-post', function ($user, $post) {
return $user->id === $post->user_id;
});
}
这将为您解析门实例并允许您定义能力。使用 boot
方法很重要,因为这样您可以确保每个服务都已注册。
所以我正在开发一个 composer 包,它将我的几个可重用代码添加到一个新的 Laravel 项目中。到目前为止,我已经在我的 boot()
方法中使用 $this->publishes()
和 $this->loadRoutesFrom()
在我的服务提供商中添加了核心翻译文件和一些模型、路由。
现在我想将 Gates 添加到那个包中,但我被卡住了。我应该以某种方式在 运行 上的项目 AuthServiceProvider
中注册这些。如果有人能给我一些如何执行此任务的建议,那就太好了。
如果要注册策略,不需要使用AuthServiceProvider,直接使用Illuminate\Support\Facades\Gate::policy($key, $value)
.
您可以在自己的包的 ServiceProvider 中执行此操作。如果你想定义能力,你可以像这样添加一个boot
方法:
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
// ...
public function boot(GateContract $gate)
{
$gate->define('update-post', function ($user, $post) {
return $user->id === $post->user_id;
});
}
这将为您解析门实例并允许您定义能力。使用 boot
方法很重要,因为这样您可以确保每个服务都已注册。