jalameta/jps-router

该包已被废弃且不再维护。未建议替代包。

v0.1.6 2019-10-28 01:59 UTC

This package is auto-updated.

Last update: 2022-05-20 18:24:28 UTC


README

PT. Jalameta Pilar Sinergis的Laravel自定义路由包装器。

安装

使用composer

composer require jalameta/jps-router

应用到您的项目中

Laravel >= 5.8

  • 自动加载 :)

Laravel <= 5.8

  • \Jalameta\Router\RouterServiceProvider 添加到 config/app.php 中的 providers 数组

在您的项目中运行命令

php artisan jps:routes --install

如果您决定移除原始的Laravel路由,可以在命令中添加 --remove 选项。因此,命令将是:

php artisan jps:routes --install --remove

JPS Router将为您配置路由,Laravel默认的routes文件夹将被删除。因此,请先备份您的定义路由。

使用方法

创建新路由

要创建新路由,只需运行: php artisan make:route DefaultRoute 运行上述命令后,名为 DefaultRoute 的路由将出现在 app/Http/Routes/DefaultRoute.php 中。创建路由后,它不会自动加载,您必须在路由配置中注册路由类。

make:route选项
  1. 注入:注入是有用的选项,可以在路由配置中自动添加路由类名,因此您无需手动添加。例如: php artisan make:route DefaultRoute --inject web 上述命令将在 config/routes.php 中定义的web组中创建默认路由。

  2. 控制器:控制器选项将生成路由及其使用的控制器。因此,您不需要运行2个artisan命令来创建新的控制器和路由。 php artisan make:route DefaultRoute --controller HomeController

  3. 帮助:显示JPS路由命令的帮助信息。

路由配置

以下是JPS路由配置的示例。

return [
    'groups' => [
        'web' => [
            'middleware' => 'web',
            'prefix' => '',
        ],
        'api' => [
            'middleware' => 'api',
            'prefix' => 'api',
        ],
    ],

    'web' => [
        /** @inject web **/
	\App\Http\Routes\DefaultRoute::class,
    ],
    'api' => [
        /** @inject api **/
    ],
];

如您所见,groups索引是组配置,您可以在其中传递任何Laravel选项,例如asdomainmiddlewareprefix等。之后,webapi是在groups索引中定义的组索引。它是一个路由类名的数组。

类结构

创建路由后,我们将看到生成的文件示例。

<?php

namespace App\Http\Routes;

use Jalameta\Router\BaseRoute;

class DefaultRoute extends BaseRoute
{

    /**
     * Register routes handled by this class.
     *
     * @return void
     */
    public function register()
    {
        // Make an awesome route
    }
}

创建路由后,我们将看到生成的文件示例。我们可以在register方法中定义路由。您所需的所有内容只是调用 $this->router 作为路由实例。然后,我们可以调用Laravel路由方法,如post、put等。请参阅Laravel路由文档

<?php

namespace App\Http\Routes;

use Jalameta\Router\BaseRoute;

class DefaultRoute extends BaseRoute
{

    /**
     * Register routes handled by this class.
     *
     * @return void
     */
    public function register()
    {
        $this->router->get('/', function () {
            return view('welcome');
        });
    }
}
使用控制器

从创建路由的命令中,我们知道我们可以传递控制器命名空间。创建的控制器将显示在路由类中作为控制器方法。

<?php

namespace App\Http\Routes;

use Jalameta\Router\BaseRoute;
use App\Http\Controllers\HomeController;

class DefaultRoute extends BaseRoute
{

    /**
     * Register routes handled by this class.
     *
     * @return void
     */
    public function register()
    {
        $this->router->get('/', [
            'uses' => $this->uses('index')
        ]);
    }
    
     /**
     * Controller used by this route.
     *
     * @return string
     */
    public function controller() 
    {
        return HomeController::class;
    }
}

上述路由等于

Route::get('/', [
    'uses' => "App\Http\Controllers\HomeController@index"
]);

这个包旨在解决定义路由时多次出现的命名空间和类名重复问题。或者,如果您不想在路由类中使用控制器,可以将要使用的控制器类名作为$this->uses()方法的第二个参数传递,例如:$this->uses('login', LoginController::class)

路由前缀

覆盖在类属性中定义的路由前缀。默认前缀是 '/';

protected $prefix = '/home';

$this->router->get($this->prefix(), [
    'uses' => $this->uses('index')
]);

上述路由等于

Route::get('/home', [
    'uses' => "App\Http\Controllers\HomeController@index"
]);
路由名称

您需要在路由类中定义路由名称属性

protected $name = 'home';

稍后我们可以使用$this->name()方法来在路由组名称和单个路由名称之间添加点(.)分隔符

$this->router->get('/', [
    'as' => $this->name('landing')
    'uses' => $this->uses('index')
]);

它等同于

Route::get('/', [
    'as' => 'home.landing'
    'uses' => "App\Http\Controllers\HomeController@index"
]);