Целью является перенаправление пользователя на страницу входа из промежуточного программного обеспечения. Промежуточное вызывается из тонкой группы маршрутов с этой линией:Правильный способ перенаправления из slim middleware
$this->get('/profile', ProfileController::class . ':index')->add(new RequireLogin());
А вот Промежуточное программное обеспечение
<?php
namespace Rib\Src\MiddleWares;
use Rib\Src\Services\FlashMessages;
use Slim\Http\Request;
use Slim\Http\Response;
class RequireLogin
{
/**
* Example middleware invokable class
*
* @param \Psr\Http\Message\ServerRequestInterface $request PSR7 request
* @param \Psr\Http\Message\ResponseInterface $response PSR7 response
* @param callable $next Next middleware
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function __invoke($request, $response, $next)
{
if (! isset($_SESSION[ 'id' ])) {
FlashMessages::flashIt('message', "The page you tried to access requires an active session. Please log back in.");
header('Location: /user/login'); # THIS LINE
exit; # AND THIS ONE
}
$response = $next($request, $response);
return $response;
}
}
Моя цель состоит в том, что, когда промежуточного слоя определяет, что пользователь не вошли в систему, то перенаправить пользователя на страницу входа. Вы можете видеть, что мой текущий путь - ПЛОХО: я использую перенаправление, за которым следует выход.
Как я могу заменить эти 2 строки соответствующим «тонким» способом?
Очень приятно! На самом деле я никогда не рассматривал метод setName на маршруте. Не является поклонником жестких правил кодирования в промежуточном программном обеспечении или классах. – Rob