【问题标题】:Symfony routing is not working?Symfony 路由不起作用?
【发布时间】:2012-03-10 13:58:48
【问题描述】:

我正在处理现有项目。我有以下两个网址

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 工作正常,但第一个 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 的工作原理。我检查了action和view,没有发现任何错误。

任何想法或调试技术??

【问题讨论】:

  • 请同时发布你的url_for函数的代码,它必须生成url
  • @osamson:我已将url_for() 代码添加到问题中。这里$hcid=147

标签: php symfony1 routing url-routing


【解决方案1】:

不要那样做你的链接。有一种更清洁的方法。

<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 参数而不是数据库?即为什么它是 $sf_params-&gt;get('courseid') 而不是来自学说对象的 $course-&gt;getId()

也不要使用course/showChapter,而是使用course_chapter的路由ID

我建议你回到 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+ 要求的一部分吗?

【讨论】:

  • +1 感谢您的建议和辛勤工作。让我弄清楚这一点。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 2019-10-06
  • 2012-06-04
  • 2022-08-14
  • 2023-02-21
  • 2013-12-20
  • 1970-01-01
相关资源
最近更新 更多