Symfony маршрутизация не работает? - PullRequest
0 голосов
/ 20 февраля 2012

Я работаю над существующим проектом. У меня есть следующие два URL

http://example.dev/en/course/myUserName/myCourseName/150/myChapterName/1016/page/1/?hcid=147

http://example.dev/en/course/myUserName/myCourseName/150/myChapterName/1016/page/2/?hcid=147

2-й URL работает нормально, но 1-й URL дает мне следующее ошибка :

Unable to find a matching route to generate url for params "array (  'action' => 'showChapter',  'module' => 'course',  'courseowner' => 'myUserName',  'coursename' => 'myCourseName',  'courseid' => '150',  'chaptername' => 'myChapterName',)"., 
referer: http://example.dev/en/course/myUserName/myCourseName/150/myChapterName/1016/page/1/?hcid=147

У меня есть следующая запись в routing.yml :

course_chapter:
  url: /:sf_culture/course/:courseowner/:coursename/:courseid/:chaptername/:chapterid/:page/:pageid/
  param: { module: course, action: showChapter }
  requirements:
      courseid: \d+

url_for ():

<?php $headchapter = ($hcid) ? '?hcid='.$hcid : '' ?>
<a href="<?php echo url_for('course/showChapter?courseowner='.$sf_params->get("courseowner").'&coursename='.$sf_params->get("coursename").'&courseid='.$sf_params->get("courseid").'&chaptername='.$chapter->getName().'&chapterid='.$chapter->getId().'&page=page&pageid=1').$headchapter ?>">

Я не могу понять, как это работает для второго URL, а не для первого URL. Я проверил действие и просмотр и не нашел ошибки.

Любая идея или техника отладки ??

1 Ответ

3 голосов
/ 20 февраля 2012

Не делайте ваши ссылки такими. Есть более чистый путь.

<a href="<?php echo url_for('course/showChapter?courseowner='.$sf_params->get("courseowner").'&coursename='.$sf_params->get("coursename").'&courseid='.$sf_params->get("courseid").'&chaptername='.$chapter->getName().'&chapterid='.$chapter->getId().'&page=page&pageid=1').$headchapter ?>">

Сделайте это вместо:

link_to("Link text","course_chapter",array("courseowner"=>$sf_params->get("courseowner"),
                                           "coursename"=>$sf_params->get("coursename"),
                                           "courseid"=>$sf_params->get("courseid"),
                                           "chaptername"=>$chapter->getName(),
                                           "chapterid"=>$chapter->getId(),
                                           "pageid"=>1,
                                           "hcid"=>$hcid))

Если param не существует в вашем URL-адресе маршрутизации, он будет добавлен как ?hcid=2 Почему вы используете sf_params для генерации параметров URL, а не базы данных? то есть почему $sf_params->get('courseid'), а не $course->getId() от объекта учения?

Также вместо course/showChapter используйте идентификатор маршрута course_chapter

Я бы посоветовал вам вернуться к руководству Symfony и перечитать раздел маршрутизации.

РЕДАКТИРОВАТЬ:

В вашем определении маршрута у вас есть:

url: /:sf_culture/course/:courseowner/:coursename/:courseid/:chaptername/:chapterid/:page/:pageid/

почему page это параметр, если он всегда имеет одно и то же значение, т. Е. Всегда будет page.

Это было бы лучше:

url: /:sf_culture/course/:courseowner/:coursename/:courseid/:chaptername/:chapterid/page/:pageid/

А chapterid и pageid не должны быть частью требований \d+ тоже?

...