anton-am / phalcon-middleware
Middleware component for Phalcon.
4.0.0
2023-02-02 08:10 UTC
Requires
- php: ^8.0
- ext-phalcon: >=5
Requires (Dev)
- codeception/codeception: ^4.1.1
- codeception/module-asserts: ^1.1.1
- phalcon/ide-stubs: v5.1.4
- phpunit/php-code-coverage: 9.2.24
- squizlabs/php_codesniffer: 3.7.1
README
Middleware component for Phalcon MVC controllers
Installing
Install using Composer:
composer require anton-am/phalcon-middleware
or add to your composer.json
"anton-am/phalcon-middleware": "^3.0.0"
You'll need to add the event to the dispatcher
DI service:
use AntonAm\Phalcon\Middleware\Event; use Phalcon\Events\Manager; use Phalcon\Mvc\Dispatcher; // ... $di->set( "dispatcher", function () use ($di) { $eventsManager = new Manager(); //Attach a listener $eventsManager->attach( 'dispatch:beforeExecuteRoute', new Event() ); $dispatcher = new Dispatcher(); $dispatcher->setEventsManager($eventsManager); return $dispatcher; }, true );
Now, you can create middleware classes:
namespace Modules\Frontend\Middlewares; use Phalcon\Mvc\User\Plugin; use AntonAm\Phalcon\Middleware\MiddlewareInterface; /** * Class CSRF * * @package Modules\Frontend\Middlewares */ class CSRF extends Plugin implements MiddlewareInterface { /** * @param array $params * @return bool */ public function handle(array $params = []): bool { if (!$this->security->checkToken()) { $this->flashSession->error('Wrong CSRF'); $this->response->redirect($this->request->getHTTPReferer(), true)->send(); return false; } return true; }
Example
Controller
class IndexController extends \Phalcon\Mvc\Controller { /** * @Middleware("Modules\Frontend\Middlewares\MustBeLoggedIn") * @Middleware("Modules\Frontend\Middlewares\HasProject") * @Middleware("Modules\Frontend\Middlewares\MustBeInProjectAs", "Creator") * @Middleware("Modules\Frontend\Middlewares\CSRF") */ public function indexAction() { // ... } }