ฉันต้องการเปลี่ยนเส้นทางผู้ใช้ที่ไม่ระบุชื่อไปยังแบบฟอร์มการเข้าสู่ระบบหากผู้ใช้ดังกล่าวพบข้อผิดพลาด 403
ฉันได้สร้างผู้สมัครสมาชิกของเหตุการณ์และนี่คือรหัสของฉัน แต่ฉันจบลงด้วยการวนซ้ำในหน้าปัจจุบัน
/**
* Redirect anonymous user to login page if he encounters 404 or 403
* response.
*
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $response
* The created response object that will be returned.
* @param string $event
* The string representation of the event.
* @param \Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher $event_dispatcher
* Event dispatcher that lazily loads listeners and subscribers from the dependency injection
* container.
*/
public function checkLoginNeeded(GetResponseEvent $response, $event, ContainerAwareEventDispatcher $event_dispatcher) {
$routeMatch = RouteMatch::createFromRequest($response->getRequest());
$route_name = $routeMatch->getRouteName();
$is_anonymous = \Drupal::currentUser()->isAnonymous();
$is_not_login = $route_name != 'user.login';
if ($is_anonymous && $route_name == 'system.403' && $is_not_login) {
$query = $response->getRequest()->query->all();
// $query['destination'] = $routeMatch->getRouteObject()->getPath();
$query['destination'] = \Drupal::url('<current>');
$login_uri = \Drupal::url('user.login', [], ['query' => $query]);
$returnResponse = new RedirectResponse($login_uri, Response::HTTP_FOUND);
$response->setResponse($returnResponse);
}
}
ฉันคิดว่าสิ่งนี้เกี่ยวข้องกับความจริงที่ว่าคำตอบนั้นมีปลายทาง (ปัจจุบัน uri) และ system.404 และ system.403 มีลำดับความสำคัญสูงที่ป้องกันไม่ให้ฉันแทนที่สิ่งนี้