2015-11-27 3 views
0

Я использую этот плагин для создания пробкового на основе URL, на CakePHP 2 веб-приложения: https://github.com/josegonzalez/cakephp-dynamic-routeDynamicRoute плагин для CakePHP давая 404 ошибки

документация предполагает, что вы могли бы назвать контроллер торт, как так: posts/view?id=45

В настоящее время мой URL-адрес работает как поведение по умолчанию Cake. Так, используя пример выше posts/view/45 работает, но posts/view?id=45 нет.

Когда я вызываю URL-адреса, как в примере, я получаю ошибку 404.

Мои функции написаны таким образом (например, в PostsController.php): public function view($id) { // logic to load post by ID // ... }

Там почти нет documentaiton для плагином выше. Кто-нибудь использовал его или знал, где я ошибаюсь? Кажется, вы не можете передать переменную GET, такую ​​как 'id', в функцию 'view', не перефразируя код внутри нее, чтобы принимать переданные параметры?

+0

Я бы сказал, что вы просто не понимали, что делает этот плагин. Из использования плагина: «* Спецификация будет ** внутренним ** CakePHP-сопоставлением, например' posts/view? Id = 45' * ", но, как вы писали, по умолчанию используется' posts/view/45'. Плагин просто позволяет вам назначить пул для конкретной спецификации. –

+0

Во всяком случае, зачем нужен URL-адрес с параметрами, когда вы устанавливаете плагин для пули? Это не имеет смысла. Не используйте URL-адреса с параметрами (поскольку они все равно не работают). –

+0

Я понимаю, что делает плагин. Мне нужны дружественные URL-адреса, как и те, которые приведены в их документации (например,/why-isnt-this-pup-aleep или/manchester/cakephp-developers-dance-dance-to-beyonce). Но для того, чтобы установить это, вы должны направить те из базы данных на соответствующее действие контроллера с идентификатором. Попробуйте использовать значение Cake по умолчанию для маршрута, и оно не работает. Другими словами, у вас может быть «спецификация» сообщений/просмотров? Id = 45, но не сообщений/просмотров/45. Но ваш контроллер не будет работать, передавая ему id =. –

ответ

0

Решение состоит в том, что некоторые функции контроллера необходимо переписать для принятия параметров стиля GET.

В документации поле «спецификации» выглядит следующим образом: posts/view?id=45

В регулярном применении CakePHP маршрут для этого было бы так: posts/view/45

Плагин просто не работает, если вы добавьте второй стиль маршрута (посты/просмотр/45) в поле «spec».

Соответственно, поля «spec» должны быть такими: posts/view?id=45, а затем ваши функции контроллера должны быть переписаны, например.

public function view($id) { 
    if (isset($this->request->params['id'])) { 
     $id = $this->request->params['id']; 
    } 
} 

Делая это означает, что он будет работать с параметром (зрение? ID = 45) или стандартным Cake вызовом (вид/45).

Пожалуйста, обратите внимание, что это не имеет ничего общего с «слизняка» аспект плагина - «слизняк» может быть что угодно, в соответствии с примерами документации: /why-isnt-this-pup-asleep или /manchester/cakephp-developers-dance-to-beyonce. Первоначальный вопрос задал вопрос, есть ли способ сопоставить «спецификацию», приведенную в документации, с функцией контроллера торта без, которая должна изменить его, как у меня выше. Ответ кажется нет, вам нужно их модифицировать!

Смежные вопросы