Php 如何使用同名的不同模块创建路由?
我有两种不同的型号:类别和页面。My schema.yml:Php 如何使用同名的不同模块创建路由?,php,symfony1,propel,Php,Symfony1,Propel,我有两种不同的型号:类别和页面。My schema.yml: propel: wiki_category: id: ~ address: { type: varchar(255) } name: { type: varchar(255), required: true } text: { type: longvarchar } wiki_page: id: ~
propel:
wiki_category:
id: ~
address: { type: varchar(255) }
name: { type: varchar(255), required: true }
text: { type: longvarchar }
wiki_page:
id: ~
category_id: { type: integer, foreignTable: wiki_category, foreignReference: id, required: true}
address: { type: varchar(255) }
name: { type: varchar(255), required: true }
text: { type: longvarchar, required: true }
My routing.yml:
category_show:
url: /:address.:sf_format
class: sfPropelRoute
options: { model: WikiCategory, type: object }
param: { module: category, action: show, sf_format: html }
requirements: { sf_method: get }
homepage:
url: /
param: { module: category, action: index }
page_show:
url: /:address/:address
class: sfPropelRoute
options: { model: WikiPage, type: object }
param: { module: page, action: show, sf_format: html }
requirements: { sf_method: get }
我想制作一个类似于/:address
(来自类别)/:address
(来自页面)的路由
有没有办法做到这一点
其想法是创建一个包含类别的页面,其中包含指向该类别页面的链接。通过按链接执行页面的动作显示。由于您有两个同名字段,因此无法理解哪个字段(来自
/:address/:address
)是用于获取WikiPage
对象的字段
第一个最简单的选项是重命名模式中的一个地址
。类似于wiki\u页面的address\u页面
,因此您将能够拥有这样的路径/:address/:address\u页面
,并且您将知道如何检索WikiPage
对象
但我会向您推荐第二种选择。
不要使用classsfPropelRoute
检索对象。改用sfRequestRoute
。然后,您可以为参数指定您想要的名称。一些更明确的内容,如:/:address\u category/:address\u page
:
page_show:
url: /:address_category/:address_page
class: sfRequestRoute
param: { module: page, action: show, sf_format: html }
requirements: { sf_method: get }
然后,在操作中,必须手动检索对象:
$wikiPage = WikiPageQuery::create()
->filterByAddress($request->getParameter('address_page'))
->leftJoin('WikiPage.WikiCategory')
->where('WikiCategory.address = ?', $request->getParameter('address_category'))
->findOne();
为了让您知道SFPROPERROUTE的功能(基本上):
- 尝试使用请求参数和路由配置检索对象
- 如果找不到对象,则重定向到404
在您的情况下,您已经检索到了对象,如果它不存在,您现在只需要转发到404:
$this->forward404Unless($wikiPage);
类sfPropelRequest不存在。sfWebRequest?@briancheg您使用的是哪个版本的symfony&推进?symfony 1.4.20,symfony的推进默认值package@briancheg哦,我明白了,那是一个旧的推进包。你能更新到最新的吗?(与您的版本向后兼容)@briancheg如果我的答案对您有帮助,您可以向上投票和/或接受:)