как вы правильно сказали, у SilverStripe есть маршруты, и их можно определить в файле конфигурации yaml.
если вы посмотрите на существующий routes.yml
в фреймворке, вы увидите, как определяется маршрут безопасности по умолчанию: https://github.com/silverstripe/silverstripe-framework/blob/fd6a1619cb7696d0f7e3ab344bc5ac7d9f6cfe77/_config/routes.yml#L17
если вы просто хотите заменить Secuirty
на Secuirty/login
, это так же просто, как создать свой собственный routes.yml
in mysite/_config/
со следующим содержимым:
---
Name: myroutesorsomeotherrandomname
Before: '*'
After:
- '#rootroutes'
- '#coreroutes'
- '#modelascontrollerroutes'
- '#adminroutes'
---
Director:
rules:
'foobar//$Action/$ID/$OtherID': 'Security'
ПРИМЕЧАНИЕ: убедитесь, что вы запустили ?flush=1, чтобы убедиться, что файл yml загружен (они кэшируются)
также убедитесь, что вы используете пробелы в файле yml, если вы используете вкладки, которые вы будет плохо
однако, если вы хотите также заменить /login
и /logout
, это больше не нужно для маршрутизации.
вход в систему и выход из системы — это действия (функции php, которые перечислены в Security::$allowed_actions и, таким образом, доступны как URL-адрес) в разделе «Безопасность».
но это все еще довольно просто, просто создайте подкласс Security и создайте нужные действия:
<?php
class MySuperSecurity extends Security {
private static $allowed_actions = array(
'showMeTheLoginForm',
'alternative_login_action_with_dashes',
'doTheLogout',
);
function showMeTheLoginForm() {
// can be visited via http://website.com/foobar/showMeTheLoginForm
return $this->login();
}
function alternative_login_action_with_dashes() {
// can be visited via http://website.com/foobar/alternative-login-action-with-dashes
return $this->login();
}
function doTheLogout($redirect = true) {
// can be visited via http://website.com/foobar/doTheLogout
return $this->logout($redirect);
}
}
и укажите путь к вашему новому классу вместо Security внутри routes.yml
:
'foobar//$Action/$ID/$OtherID': 'MySuperSecurity'
ПРИМЕЧАНИЕ: еще раз убедитесь, что вы выполнили ?flush=1, и private static $allowed_actions
, и файл конфигурации yml кэшируются silverstripe.
ПРИМЕЧАНИЕ: оба решения предложенный в этом посте, создаст дополнительный маршрут для входа и не заменит существующий, поэтому старый Security/login
по-прежнему будет доступен
person
Zauberfisch
schedule
09.11.2013