Как запустить без действия и одну переменную в Silverstripe url_handlers?

Я работаю над проектом, который имеет специальный тип страницы, который проверяет одну буквенно-цифровую строку 250.

В идеале я бы хотел, чтобы структура URL работала так:
http://www.example.com/check/I1gdTVUsnezY9SDI8V0GS2mg7Y0IdG6MqjCZ8t1yejRdi0pKzyr7G28iF0fyxOW9Le9vg3op7NnuCE0unT7d09aN00Trn7xPYAjLRhqQ9k5aRlsThsTk0HaS966MCDb4aC23RW4Cl273e9YiWKFNm2STI75X1jnlZ684M7ejDpmWg1YfM32OpwX066bF5VTp5v0F5I42T2SWh8QhMc9GW9I2ZbuP7ykh710UHnLwQyA3BO7KitZWcCU0u9

Однако используя allowed_actions а также url_handlers стандартным способом я могу заставить его работать, только если я предваряю буквенно-цифровую строку «uid» — http://www.example.com/check/uid/string-goes-here

class CheckPage_Controller extends Page_Controller {

private static $allowed_actions = array(
'uid'
);
private static $url_handlers = array(
'uid/$uID' => 'uid'
);

Возможно ли, чтобы url_handlers работал только с переменной и без действий на пользовательской странице?

0

Решение

Вы можете определить маршрут без действий в вашем _config.php:

Director::addRules(100, array(
'check/$UID' => 'CheckPage_Controller'
));

и в вашем CheckPage_Controller Вы можете отловить запрос в функции index:

public function index() {
var_dump($this->request->allParams());die;
}

Но вы должны знать, что маршрут добавления перехватывает все запросы к / check / что угодно. Так что вам нужно определить другой URL для других вещей.

1

Другие решения

Предполагая, что у вас есть тип страницы «CheckPage» с $ URLSegment «check» и некоторые Dataobjects в отношении has_many, вы можете использовать расширение Nightjars для использования этого метода urlslug, который действительно элегантен:

https://github.com/NightJar/silverstripe-slug/

ATM — это не готовый модуль для установки, а расширение контроллера, которое вы можете настроить.

Если вам нужна дополнительная помощь, пожалуйста, предоставьте больше информации о вашей структуре кода.

0

По вопросам рекламы [email protected]