Slim Framework 3-如何将$ logger注入到路由控制器

爱迪生

我正在使用Slim Framework3。我想将中的$logger定义注入dependencies.php到Router Controller类中。以下是我的工作,是否有更好的方法?

routes.php

$app->get('/test', function($request, $response, $args){
  $controller = new AccountController($this->get('logger'));
  return $controller->test($request, $response, $args);
});

AccountController

class AccountController{

    private $logger;
    function __construct($logger){
        $this->logger = $logger;
    }

    public function test($request, $response, $args){
        $this->logger->info('i am inside controller');
        return $response->withHeader('Content-Type', 'application/json')->write('test');
    }
}

在Slim Framework 3文档中,使用路由控制器的正确方法应该是:

$app->get('/test', 'AccountController:test');

但是,$logger当我选择以更加“优雅”的方式编写我的Route Controller时,如何注入AccountController?

亚历克斯

根据容器解析文档,您应该能够通过容器在控制器内部访问记录器:

AccountController

class AccountController
{
    protected $ci;

    //Constructor
    public function __construct(ContainerInterface $ci) 
    {
        $this->ci = $ci;
    }

    public function test($request, $response, $args)
    {
        $this->ci->get('logger')->info('i am inside controller');
        return $response->withHeader('Content-Type', 'application/json')->write('test');
    }
}

调用时$app->get('/test', 'AccountController:test');,Slim应该自动将容器传递到AccountController的构造函数中。

话虽这么说,这比一个出色的设计示例更具有便利性。正如Rob Allen在他的回答中所解释的那样,通过将控制器注入到应用程序容器中,而不是将容器注入到每个控制器中,可以实现更好的模块化,从而可以更轻松地测试代码(如果您正在使用单元测试)

看一下他的Slim应用示例例如AuthorController如果您看一下,您会发现使用此设计控制器类如何不再依赖于提供所有服务的神奇容器。相反,您可以在构造函数中明确说明每个控制器将需要哪些服务。这意味着您可以更轻松地模拟测试方案中的各个依存关系。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

依赖注入Slim Framework 3

来自分类Dev

Slim Framework:路由和控制器

来自分类Dev

Slim Framework 3上传

来自分类Dev

Slim 3 框架 - 将数据从中间件传递到控制器 - 动作参数

来自分类Dev

Slim Framework:如何打破循环依赖注入?

来自分类Dev

Slim Framework-PHP-如何防止注入?

来自分类Dev

PHP Slim 3 Framework - 我可以把我的控制器文件放在哪里?

来自分类Dev

将数据绑定到中间件中的请求对象[Slim Framework 3]

来自分类Dev

Slim Framework v3路由条件

来自分类Dev

Slim 3 Framework - 如何返回生成的文件?

来自分类Dev

使用Slim Framework将“使用”对象传递给路由

来自分类Dev

使用Slim Framework将“使用”对象传递给路由

来自分类Dev

Slim Framework将数据传递到Twig视图

来自分类Dev

如何使用Slim Framework API连接(路由)Angular?

来自分类Dev

Slim Framework:如何捕获多个完全可选的路由?

来自分类Dev

Slim Framework 3 PHP-视图变量

来自分类Dev

如何将根请求路由到控制器?

来自分类Dev

Slim Framework 如何在拦截器中按名称捕获路由参数

来自分类Dev

Slim 3 Framework-我应该为我的API使用路由组吗?

来自分类Dev

如何在Slim Framework 3上创建中间件?

来自分类Dev

将PS3 Slim变成Linux服务器

来自分类Dev

将Slim Framework与Swagger PHP结合使用

来自分类Dev

Slim Framework:首页路由,不带斜杠

来自分类Dev

Slim Framework API路由的Nginx配置

来自分类Dev

如何在Slim 3路由中注入全局变量?

来自分类Dev

Slim 3:如何访问设置?

来自分类Dev

如何使用Slim Framework转发HTTP请求

来自分类Dev

如何将 ui 路由器的 url 参数注入控制器

来自分类Dev

如何重构路由的长php文件(我正在使用Slim Framework)

Related 相关文章

热门标签

归档