2017-01-30 8 views
1

У меня есть обычный класс php за пределами контроллера, поэтому он не использует автоматическую инъекцию контейнера. Мне нужно получить доступ к объекту ответа из этого класса, и я предполагаю, что я должен получить его из контейнера. Каков правильный способ доступа к нему? Просто передайте его как аргумент, чтобы внешний класс мог его использовать? Есть ли способ лучше ?Правильный способ доступа к контейнеру из класса не в тонком контроллере

+0

зачем вам нужен объект ответа – jmattheis

+0

ли сделать редирект –

ответ

0

Если вам нужно отправить подзапрос, Slim 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'); 
     } 
    } 
} 
0

Для этого вам необходимо использовать промежуточное ПО, потому что объект ответа неизменен, поэтому «изменение» не будет обновлять ответ, который будет использоваться тонким.

$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.

+0

Спасибо, будет расследовать это. Быстрый вопрос: возможно ли инициировать процесс тонкого маршрута (который будет запускать промежуточное ПО) из «внешнего» файла, который не находится внутри контроллера? –

+0

@RobertBrax Я не понимаю, вы запускаете выполнение с помощью '$ app-> run();' – jmattheis

+0

Да, приложение работает нормально, но я хочу вызвать процесс запроса из файла класса, который не находится в контроллере. Представьте, что у меня есть файл «authRequired.php», который не находится в контроллере, но все же должен иметь возможность выполнять перенаправление изнутри. –

 Смежные вопросы

  • Нет связанных вопросов^_^