galihlasahido/codeigniter-attributeroutes

CodeIgniter4 属性路由模块

v1.0.0 2024-01-14 03:04 UTC

This package is auto-updated.

Last update: 2024-09-14 05:19:25 UTC


README

此库通过引入PHP 8属性增强了CodeIgniter 4的路由系统。它允许在控制器方法中直接定义路由,从而简化了路由过程并减少了冗余。此库还支持多个控制器命名空间,并且可以轻松地将中间件与路由集成。

特性

  • 使用PHP 8属性定义路由。
  • 支持GET、POST、PUT、DELETE、PATCH和OPTIONS方法。
  • 路由中的正则表达式模式。
  • 与路由的过滤器集成。
  • 多个控制器命名空间。

安装

  1. 通过Composer安装

    使用Composer将库添加到您的CodeIgniter 4项目中

    composer require galihlasahido/codeigniter-attributeroutes
  2. 更新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";
    }

}

使用不同命名空间

  1. 更新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');
        }
    }