0
目標是將用戶重定向到中間件的登錄頁面。 中間件從超薄路線組此行稱爲:正確的方式從薄中間件重定向
$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;
}
}
我的目標是當中間件檢測到用戶當前沒有登錄,則將用戶重定向到登錄頁面。 你可以看到我目前的方式很糟糕:我使用了一個重定向,然後是一個退出。
我怎樣才能用適當的「苗條」方式取代這兩條線?
非常好!我其實從來沒有真正查看過路徑上的setName方法。不是中間件或類中硬編碼路由的粉絲。 – Rob