paveldanilin / slimcontroller
此包已被弃用且不再维护。未建议替代包。
FrontController 模式
0.1
2017-09-05 00:10 UTC
Requires
- php: >=5.5.0
- psr/container: ^1.0
- psr/http-message: ^1.0
This package is auto-updated.
Last update: 2020-08-16 10:15:08 UTC
README
FrontController 模式的实现。
依赖于 PSR 接口
- Psr\Container\ContainerInterface
- Psr\Http\Message\ServerRequestInterface
- Psr\Http\Message\ResponseInterface
用法
Slim3
路由
$app->group('/v1', function() { $this->group('/system', function() { $this->map(['GET', 'POST', 'PUT', 'DELETE'], '/{controller}/{action}[/{params:.*}]', 'SystemFrontController:handle'); }); });
容器
$container['SystemFrontController'] = function($c) { $settings = $c->get('settings')['systemFrontController']; return new Slim\Controller\FrontController([ 'startup_path' => '/site/controllers/', 'namespace' => 'MyApp\\Controllers\\', 'has_own_folder' => true, 'route_key_controller' => 'controller', 'route_key_action' => 'action', 'route_key_exparams' => 'params', 'on' => [ 'beforeControllerCall' => function($controller, $action, $request, $response, $args, $c) { $logger = $c->get('logger'); $logger->info("container=$controller; action=$action; args=" . print_r($args, true)); } ] ], $c); };
示例
假设我们收到了一个 URL 为 'http://site.com/v1/system/auth/login' 的 GET 请求。根据路由设置(如上所述),此请求将由 'Auth' 控制器和 'Login' 动作处理。此控制器必须位于 '/site/controllers/Auth/AuthController.php' 文件中,并且必须声明为名为 AuthController 的类,并具有公共方法 login($request, $response, $args)。将在类构造函数中注入一个容器对象,因此您可以在控制器中访问应用程序的所有服务。
namespace MyApp\Controllers; use Psr\Container\ContainerInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; class AuthController { public function __construct(ContainerInterface $container) { } public function login(ServerRequestInterface $request, ResponseInterface $response, $args) { return $response; } }