我正在研究现有项目。我有以下两个网址
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。我检查了操作和视图,但没有发现任何错误。
任何想法或调试技术??
答案 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/
并且chapterid
和pageid
也需要成为\d+
要求的一部分吗?