royvoetman/laravel-prefixer

在控制器中定义一个前缀,它将自动附加到视图或路由名称上。

v1.0.4 2023-06-17 07:31 UTC

This package is auto-updated.

Last update: 2024-09-17 10:24:45 UTC


README

介绍

此软件包允许你在控制器中定义一个前缀,该前缀将被自动附加到视图和/或路由名称上。

在资源控制器中,通常所有关联的视图都放在同一个文件夹中,路由的位置也是如此。使用此功能,你可以定义一个前缀,该前缀将自动附加到视图名称或路由名称。

Latest Version MIT Licensed Total Downloads

安装

composer require royvoetman/laravel-prefixer 

视图前缀

当你想使用视图前缀时,你的控制器必须实现 RoyVoetman\Prefixer\Contracts\ViewPrefix 接口。此接口要求你添加一个返回 stringviewPrefix 方法。

其次,你的控制器必须包含 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';
    }
}

视图和路由前缀

当你想实现 ViewPrefixRoutePrefix 接口时,有一个方便的快捷方式。你可以包含 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)。有关更多信息,请参阅 许可文件