kenjis / ci4-attribute-routes
CodeIgniter4 属性路由模块
v0.3.1
2023-02-12 08:20 UTC
Requires
- php: ^8.0
Requires (Dev)
- codeigniter4/codeigniter4: dev-develop
- codeigniter4/devkit: ^1.0
- doctrine/coding-standard: ^9.0
- icanhazstring/composer-unused: ^0.8.1
- kenjis/phpunit-helper: ^1.1.2
- phpmd/phpmd: ^2.11
- phpmetrics/phpmetrics: ^2.7
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.13
- rector/rector: 0.15.13
- squizlabs/php_codesniffer: ^3.6
- vimeo/psalm: ^4.18
Suggests
- ext-fileinfo: Improves mime type detection for files
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
配置
- 将以下代码添加到您的
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'; }
- 禁用自动路由并启用路由优先级
--- 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