kenjis/ci4-attribute-routes

CodeIgniter4 属性路由模块

v0.3.1 2023-02-12 08:20 UTC

This package is auto-updated.

Last update: 2024-09-12 11:50:53 UTC


README

此包可以从您的 Controllers 中的 属性路由 生成一个 路由文件

  • 您可以在您的 Controllers 中设置路由并禁用 自动路由
  • 它生成了一个路由文件,因此,在运行时没有额外的开销。
  • 生成的路由文件可用于 PHP 7.3 生产服务器。
use Kenjis\CI4\AttributeRoutes\Route;

class SomeController extends BaseController
{
    #[Route('path', methods: ['get'])]
    public function index()
    {
        ...
    }
}

要求

  • CodeIgniter 4.3.1 或更高版本
  • Composer
  • PHP 8.0 或更高版本

安装

$ composer require kenjis/ci4-attribute-routes

配置

  1. 将以下代码添加到您的 app/Config/Routes.php 文件底部
/*
 * Attribute Routes
 *
 * To update the route file, run the following command:
 * $ php spark route:update
 *
 * @see https://github.com/kenjis/ci4-attribute-routes
 */
if (file_exists(APPPATH . 'Config/RoutesFromAttribute.php')) {
    require APPPATH . 'Config/RoutesFromAttribute.php';
}
  1. 禁用自动路由并启用路由优先级
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -22,7 +22,8 @@ $routes->setDefaultController('Home');
 $routes->setDefaultMethod('index');
 $routes->setTranslateURIDashes(false);
 $routes->set404Override();
-$routes->setAutoRoute(true);
+$routes->setAutoRoute(false);
+$routes->setPrioritize();

这是可选的,但强烈推荐。

快速入门

1. 在您的 Controllers 中添加属性路由

#[Route()] 属性添加到您的 Controller 方法中。

<?php
namespace App\Controllers;

use Kenjis\CI4\AttributeRoutes\Route;

class News extends BaseController
{
    #[Route('news', methods: ['get'])]
    public function index()
    {
        ...
    }
}

2. 更新路由文件

$ php spark route:update

APPPATH/Config/RoutesFromAttribute.php 被生成。

使用 php spark routes 命令检查您的路由。

路由属性

路由

#[Route('news', methods: ['get'])]
#[Route('news/create', methods: ['get', 'post'])]
#[Route('news/(:segment)', methods: ['get'], options: ['priority' => 1])]

路由分组

use Kenjis\CI4\AttributeRoutes\RouteGroup;

#[RouteGroup('', options: ['filter' => 'auth'])]
class GroupController extends BaseController
{
    #[Route('group/a', methods: ['get'])]
    public function getA(): void
    {
        ...
    }
    ...
}

路由资源

use Kenjis\CI4\AttributeRoutes\RouteResource;

#[RouteResource('photos', options: ['websafe' => 1])]
class ResourceController extends ResourceController
{
    ...
}

路由表示器

use Kenjis\CI4\AttributeRoutes\RoutePresenter;

#[RoutePresenter('presenter')]
class PresenterController extends ResourcePresenter
{
    ...
}

故障排除

生成的路由文件中没有路由

您必须在您的 Controllers 中导入属性类。

例如:

use Kenjis\CI4\AttributeRoutes\Route;
...
    #[Route('news', methods: ['get'])]
    public function index()

无法正确路由,或发生 404 错误

使用 php spark routes 命令显示您的路由,并检查路由的顺序。第一个匹配的路由将被执行。像 (.*)([^/]+) 这样的占位符接受任何字符或段。因此,您必须将此类路由移动到底部。

在单个控制器中,您可以将其方法移动到底部。

或者使用 options 设置路由优先级

#[Route('news/(:segment)', methods: ['get'], options: ['priority' => 1])]

0 是默认优先级,指定的 priority 选项中的数字越高,路由优先级在处理队列中的位置就越低。

开发环境

安装

composer install

可用命令

composer test              // Run unit test
composer tests             // Test and quality checks
composer cs-fix            // Fix the coding style
composer sa                // Run static analysys tools
composer run-script --list // List all commands