Symfony路由不起作用?

时间:2012-02-20 07:25:26

标签: php symfony1 routing url-routing

我正在研究现有项目。我有以下两个网址

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

第二个网址工作正常,但是第一个网址却给了我错误

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 个答案:

答案 0 :(得分: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))

如果您的路由网址中不存在参数,则会附加?hcid=2的附加内容 为什么使用sf_params生成URL参数而不是数据库?那么为什么它是一个学说对象$sf_params->get('courseid')而不是$course->getId()

而不是使用course/showChapter使用路由ID course_chapter

我建议你回到symfony手册并重新阅读路由部分。

编辑:

在路线定义中,您有:

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

为什么页面是一个参数,如果它始终是相同的值,即它总是会页面。

这会更好:

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

并且chapteridpageid也需要成为\d+要求的一部分吗?