galihlasahido / codeigniter-attributeroutes
CodeIgniter4 属性路由模块
v1.0.0
2024-01-14 03:04 UTC
Requires
- php: ^7.4 || ^8.0
Requires (Dev)
- codeigniter4/devkit: ^1.1
README
此库通过引入PHP 8属性增强了CodeIgniter 4的路由系统。它允许在控制器方法中直接定义路由,从而简化了路由过程并减少了冗余。此库还支持多个控制器命名空间,并且可以轻松地将中间件与路由集成。
特性
- 使用PHP 8属性定义路由。
- 支持GET、POST、PUT、DELETE、PATCH和OPTIONS方法。
- 路由中的正则表达式模式。
- 与路由的过滤器集成。
- 多个控制器命名空间。
安装
-
通过Composer安装
使用Composer将库添加到您的CodeIgniter 4项目中
composer require galihlasahido/codeigniter-attributeroutes
-
更新Bootstrap文件
use Galihlasahido\Attributeroutes\Router\CustomRouter; use Config\Services; $routes = Services::routes(); $customRouter = new CustomRouter($routes, Services::request(), ['App\\Controllers']); $customRouter->initialize(); Services::injectMock('router', $customRouter);
根据项目结构调整数组中的命名空间。
用法
定义路由
使用属性直接在控制器方法中定义路由
namespace App\Controllers; use Galihlasahido\Codeigniter\Attributeroutes\Attributes\GetRoute; use Galihlasahido\Codeigniter\Attributeroutes\Attributes\PostRoute; class MyController { #[GetRoute('/', ['filter'=> 'MyFilter'])] public function index() { return "GET method with for index"; } #[GetRoute('/test-get/(\d+)')] public function testGetMethod($id) { return "GET method with ID: $id"; } #[PostRoute('/test-post')] public function testPostMethod() { return "POST method"; } }
使用不同命名空间
-
更新Bootstrap文件
修改您的app/Config/Routes.php以使用自定义路由器
use Galihlasahido\Attributeroutes\Router\CustomRouter; use Config\Services; $routes = Services::routes(); $customRouter = new CustomRouter($routes, Services::request(), ['App\\Controllers', 'Modules\\Dashboard\\Controllers']); $customRouter->initialize(); Services::injectMock('router', $customRouter);
修改您的app/Config/Autoload.php以使用自定义路由器,在类中添加以下代码
public function __construct() { parent::__construct(); foreach(glob(ROOTPATH . 'modules/*', GLOB_ONLYDIR) as $item_dir) { $explode = explode(DIRECTORY_SEPARATOR, $item_dir); if (file_exists($item_dir)) { $this->psr4['Modules\\'.end($explode)] = ROOTPATH . 'modules/'.end($explode); } } }
要使用该类,您可以在以下文件夹中创建一个类
└── Codeigniter project/ └── Modules/ ├── Controllers/ │ └── Dashboard.php ├── Views ├── Config └── Models<?php namespace Modules\Dashboard\Controllers; use Galihlasahido\Codeigniter\Attributeroutes\Attributes\GetRoute; class Dashboard extends BaseController { public function __construct() { } #[GetRoute('/test-dashboard')] public function index() { return view('Modules\Dashboard\Views\main'); } }