royvoetman / laravel-prefixer
在控制器中定义一个前缀,它将自动附加到视图或路由名称上。
Requires
- php: ^7.2 || ^8.0
- illuminate/http: ^5.7|^6.0|^7.0|^8.0|^9.0|^10.0
- illuminate/support: ^5.7|^5.8|^5.9|^6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- phpunit/phpunit: ^8.1
README
介绍
此软件包允许你在控制器中定义一个前缀,该前缀将被自动附加到视图和/或路由名称上。
在资源控制器中,通常所有关联的视图都放在同一个文件夹中,路由的位置也是如此。使用此功能,你可以定义一个前缀,该前缀将自动附加到视图名称或路由名称。
安装
composer require royvoetman/laravel-prefixer
视图前缀
当你想使用视图前缀时,你的控制器必须实现 RoyVoetman\Prefixer\Contracts\ViewPrefix
接口。此接口要求你添加一个返回 string
的 viewPrefix
方法。
其次,你的控制器必须包含 RoyVoetman\Prefixer\Http\Traits\CreatesViews
特性。这个特性将 view(string $view)
方法添加到控制器,它为我们处理前缀。最佳实践是将此特性包含在 BaseController
中。此方法检查是否实现了 CreatesViews
接口,如果没有,此方法的行为与全局辅助函数 view()
相同。
namespace App\Http\Controllers; use Illuminate\Contracts\Support\Renderable; use RoyVoetman\Prefixer\Contracts\ViewPrefix; use RoyVoetman\Prefixer\Http\Traits\CreatesViews; /** * Class BookController * * @package App\Http\Controllers */ class BookController extends Controller implements ViewPrefix { use CreatesViews; /** * @return \Illuminate\Contracts\Support\Renderable */ public function create(): Renderable { // Return view: `authorized.books.create` return $this->view('create'); } /** * @return \Illuminate\Contracts\Support\Renderable */ public function edit(Book $book): Renderable { // You can have chain methods like `with()` just like // you normally would when using `return view()` return $this->view('edit')->with('book', $book); } /** * @return string */ public function viewPrefix(): string { return 'authorized.books'; } }
路由前缀
路由前缀的工作方式与视图前缀相同,但有以下不同:
控制器必须实现 RoyVoetman\Prefixer\Contracts\RoutePrefix
接口,并包含 RoyVoetman\Prefixer\Http\Traits\ForwardsRequests
特性。
与 viewPrefix
方法不同,你必须包含一个 routePrefix
方法。并且与 view(string $view)
方法不同,你必须使用 redirect(string $route)
方法。当未实现 RoutePrefix
方法时,此方法的行为将与调用 redirect()->route($route)
相同。
路由前缀仅在您使用 命名路由 时才有效。
namespace App\Http\Controllers; use Illuminate\Http\RedirectResponse; use RoyVoetman\Prefixer\Contracts\RoutePrefix; use RoyVoetman\Prefixer\Http\Traits\ForwardsRequests; /** * Class BookController * * @package App\Http\Controllers */ class BookController extends Controller implements RoutePrefix { use ForwardsRequests; /** * @return \Illuminate\Http\RedirectResponse */ public function store(): RedirectResponse { ... // Redirect to: `books.index` return $this->redirect('index'); } /** * @return \Illuminate\Http\RedirectResponse */ public function update(Book $book): RedirectResponse { ... // You can have chain methods like `with()` just like // you normally would when using `return redirect()` return $this->redirect('index')->with('status', 'Book updated'); } /** * @return string */ public function routePrefix(): string { return 'books'; } }
视图和路由前缀
当你想实现 ViewPrefix
和 RoutePrefix
接口时,有一个方便的快捷方式。你可以包含 RoyVoetman\Prefixer\Contracts\ResponsePrefixes
接口,该接口仅扩展了这两个接口。
/** * Interface ResponsePrefixes * * @package App\Interfaces */ interface ResponsePrefixes extends RoutePrefix, ViewPrefix { // }
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG。
贡献
欢迎贡献,并且将得到完全的认可。我们通过 Github 上的拉取请求接受贡献。
拉取请求
- PSR-2 编码规范 - 应用规范的最简单方法是通过安装 PHP Code Sniffer。
- 记录任何行为变化 - 确保更新
README.md
和任何其他相关文档。 - 创建功能分支 - 不要要求我们从你的主分支拉取。
- 每个特性一个拉取请求 - 如果你想要做更多的事情,请发送多个拉取请求。
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。