2012-02-20 4 views
0

Я работаю над существующим проектом. Я следующие два URL-адресаМаршрутизация Symfony не работает?

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 

второй 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-адреса. Я проверил действие и просмотр, и я не обнаружил ошибок.

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

+0

Просьба также указать код вашей функции 'url_for', который должен сгенерировать URL-адрес –

+0

@osamson: я поставил под вопрос код' url_for() '. Здесь '$ hcid = 147' – Awan

ответ

3

Не делайте никаких ссылок. Существует более чистый способ.

<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)) 

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

Кроме того, вместо того, чтобы использовать course/showChapter использовать маршрут идентификатор course_chapter

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

EDIT:

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

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

почему страница параметр, если это всегда то же самое значение, то она всегда собирается быть страница.

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

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

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

+0

+1 за ваши предложения и напряженную работу. Позвольте мне понять это. благодаря – Awan

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