从不在超薄控制器中的类访问容器的正确方法

时间:2017-01-30 11:44:59

标签: slim

我在控制器之外有一个常规的php类,所以它不会从容器的自动注入中受益。我需要从该类访问响应对象,我想我应该从容器中获取它。 访问它的正确方法是什么?只是将它作为参数传递,以便外部类可以使用它?还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

你需要使用中间件,因为响应对象是不可变的,因此“更改”它不会更新slim将使用的响应。

$app->add(function($request, $response, $next) {
    if($shouldRedirect === true) {
        return $response->withRedirect('myurl'); // do not execute next middleware/route and redirect
    }
    return $next($request, $response); // execute next middleware/ the route
}); 

有关中间件have a look at this的详细信息。

答案 1 :(得分:0)

如果您需要发送子请求,请修改provides such functionality。但是使用它carefully,因为在某些情况下它的结果并不明显。

<?php
class MySortOfOutsideClass
{
    /**
     * If you need to send a subrequest, you have to access application instance,
     * so let's inject it here.
     */
    public function __construct(\Slim\App $app)
    {
        $this->$app = $app;
    }

    /**
     * Method that makes a subrequest, and returns the result of it.
     */
    public function myMethod()
    {
        if ($subRequestIsRequired) {
            return $this->app->subRequest('GET', '/hello');
        }
    }
}