juliangut / slim-controller
Slim 框架控制器创建器
Requires
- php: >=5.5
- slim/slim: ^3.0
Requires (Dev)
- phpmd/phpmd: ~2.2
- phpunit/phpunit: ~4.5
- sebastian/phpcpd: ~2.0
- squizlabs/php_codesniffer: ~2
README
Slim3 控制器管理
注意:使用此包的用户应考虑迁移到 juliangut/slim-routing
路由类创建模板,允许您将控制器类定义为服务,以便从容器中轻松提取,并扩展基控制器类。
我强烈建议您不要使用此库,除非用于快速原型设计或特定用例。如果您真的想遵循 SOLID 原则,请不要使用此包,而是直接在控制器类中注入依赖项,使用容器创建和注入依赖项,或者尝试使用 PHP-DI 等其他容器,如 juliangut/slim-php-di
我无法强调这一点,此库旨在与默认 Slim 容器配合使用,并且仅在特定情况下使用。
安装
最佳安装方法是使用 Composer
composer require juliangut/slim-controller
然后包含自动加载文件
require_once './vendor/autoload.php';
使用方法
use \Jgut\Slim\Controller\Resolver; // Define your controllers $controllers = [ 'MyController', ]; // Create Slim app and fetch DI Container $app = new \Slim\App(); $container = $app->getContainer(); // Register Controllers foreach (Resolver::resolve($controllers) as $controller => $callback) { $container[$controller] = $callback; } // Define route (\MyController has already been registered) $app->get('hello/app', '\MyController:dispatch'); // Run app $app->run();
如果您的控制器实现了 Jgut\Slim\Controller\Controller
,则 DI 容器会自动注入,您可以通过 getContainer
方法访问它。
如果您的控制器扩展了 Jgut\Slim\Controller\Base
,您也可以像在 Closure
路由回调中那样直接访问容器服务。只需注意不要将具有与容器中服务相同名称的类属性定义为类属性。为此,容器被注入到控制器中,并定义了 __get
和 __isset
魔术方法来查找容器。
use Jgut\Slim\Controller\Base as BaseController; class MyController extends BaseController { public function displatch($request, $response, array $args) { // Pull Twig view service given it was defined return $this->view->render($response, 'dispatch.twig'); } }
您可以使用解析器来定义您的 class
路由回调,并且不需要在这些类上实现 Controller
或扩展 Base
,在这种情况下,您的控制器将无法访问容器,但它仍然是一个有效的回调。
重要注意
作为一般规则,直接注入容器被认为是坏做法,因为您实际上是在隐藏依赖项,通过从容器中获取它们,而不是在类中定义它们。您将使用容器作为服务定位器,而不是真正的 DIC。
注意
此控制器注册仅适用于不需要任何参数的构造函数的控制器。如果您需要在其 __construct()
方法中具有参数的控制器,您仍然可以受益于 \Jgut\Slim\Controller\Controller
,但您必须自己注册它。
use Jgut\Slim\Controller\Controller; $container['\MyController'] = function($container) { $controller = new \MyController('customParameter'); // Set container into the controller if ($controller instanceof Controller) { $controller->setContainer($container); } return $controller; }
贡献
发现错误或有功能请求? 请打开一个新问题。在查看现有问题之前
查看文件 CONTRIBUTING.md
许可
在 BSD-3-Clause 许可下发布。
请参阅源代码中包含的文件 LICENSE 以获取许可条款副本