Я хотел бы реализовать некоторую настраиваемую маршрутизацию на моем сайте, которая в конечном итоге станет поиском базы данных для определения возвращаемого содержимого. Я смотрел на this example, который не работает должным образом (в основном потому, что он был для SS2).Пользовательская маршрутизация без переопределения основной CMS-маршрутизации
У меня есть главный routes.yml:
---
Name: mysiteroutes
After:
- 'framework/routes#coreroutes'
---
Director:
rules:
'create//$Action': 'CreateController'
'profile//$Person/$Action/': 'ProfileController'
Мой _config.php:
Director::addRules(2, array(
'$URLSegment//$Action/$Detail/$Option' => 'BaseController',
));
Мой BaseController:
class BaseController extends ModelAsController {
public function getNestedController() {
if ($this->getRequest()->params('URLSegment') =='Test') {
return new ProfileController();
} else {
return parent::getNestedController($this->getRequest()->params('URLSegment'));
}
}
}
Мой ProfileController:
class ProfileController extends Controller {
private static $allowed_actions = array(
'test'
);
public function index(SS_HTTPRequest $request) {
return $this->renderWith(array("ProfileHomePage", "Page"));
}
public function test(SS_HTTPRequest $request) {
print_r($request->params());
return $this->renderWith(array("ProfileHomePage", "Page"));
}
}
Это нормально работает без динамического маршрута, но я хотел бы что-нибудь поймать (например) /example/
проверить, есть ли для него запись db (через пользовательский скрипт, который я еще не написал), если не маршрутизировать его cms (т.е. проверьте, существует ли для него предопределенный маршрут, а затем, если перед ним есть страница, перед возвратом 404). Как я могу это достичь?
Я пробовал '$URLSegment//$Action/$Detail/$Option': 'ProfileController'
, который я мог правильно направить и загрузить пользовательские шаблоны, но это означало, что /admin/
, /create/
и другие предопределенные маршруты не будут работать.
Может быть, вы хотите __магические методы? – Deep
Это больше связано с маршрутизацией и не переопределяет основные функции, не уверен, как методы __magic помогут исправить это? – Rudiger
Вам нужны динамические маршруты. Вы можете передать сегмент URL или часть uri или полный запрос в метод __get() для пользовательских вызовов для любых ваших (pre/post/partial) -routes. И здесь вы можете иметь отдельную конфигурацию. – Deep