nin / phalcon-middleware
集成 Middleware 与 Phalcon 5。
v1.0.0
2023-02-18 04:29 UTC
Requires
- php: ^8.0.0
This package is auto-updated.
Last update: 2024-09-18 07:41:24 UTC
README
这是一个用于集成中间件与 Phalcon 5 的包。中间件提供了一种方便的机制来检查和过滤进入您应用程序的 HTTP 请求。
安装
使用 composer 安装此包。
composer require nin/phalcon-middleware
在 index.php
中注册一个提供者
$container = new \Phalcon\Di\FactoryDefault(); $container->register(new \Nin\Middleware\ServiceProvider());
或者 app/config/providers.php
return [ \Nin\Middleware\ServiceProvider::class, ];
使用方法
配置
创建配置文件 config/middleware.php
<?php return [ // The application's global HTTP middleware stack // These middleware are run during every request to your application. 'middleware_global' => [ \App\Middleware\TrimStrings::class ], // The application's route middleware groups. 'middleware_groups' => [ 'web' => [ \App\Middleware\StartSession::class ], 'api' => [ \App\Middleware\ApiMiddleware::class, \App\Middleware\AdminApiMiddleware::class ] ], ];
创建中间件类
<?php namespace App\Middleware; use Nin\Middleware\Middleware; class TestMiddleware extends Middleware { public function handle($request) { if ($request->get('token') !== 'valid-token') { throw new \Exception('Token invalid.'); } return parent::handle($request); } }
将中间件分配给路由
use Phalcon\Mvc\Router; $router = new Router(); $router->addGet( '/invoices/edit/{id}', [ 'controller' => 'invoices', 'action' => 'edit', 'middleware' => ['web', 'auth'], ] );
对于组
new \Phalcon\Mvc\Router\Group([ 'module' => 'backend', 'middleware' => 'web', ]);
将中间件分配给控制器
class InvoicesController extends Controller { public function initialize() { $this->middleware->attach('auth'); } public function editAction() { // OR: $this->middleware->attach('auth'); } }
中间件参数
$this->middleware->attach( ['web', 'auth:admin']); class AuthMiddleware extends \Nin\Middleware\Middleware { public function handle($request) { $param = $this->getParam(); if ($param !== 'admin') { throw new \Exception('Authenticate Fail.'); } return parent::handle($request); } }
重定向
重定向到路由
public function handle($request) { if ($this->getParam() !== 'admin') { return $this->redirectToRoute('login'); } return parent::handle($request); }
重定向到 URL
public function handle($request) { if ($this->getParam() !== 'admin') { return $this->redirectToUrl('/login'); } return parent::handle($request); }