Routing Symfony将两个模型传递给route
我有这个路由。yml:Routing Symfony将两个模型传递给route,routing,symfony1,Routing,Symfony1,我有这个路由。yml: post: class: sfDoctrineRouteCollection options: { model: BlogPost } test: url: /company/:company_id//blog/:blog_id class: sfDoctrineMultiRoot param: { module: company, action: show } 我需要这个网址: /公司/24/mycompany/blog/post/13
post:
class: sfDoctrineRouteCollection
options: { model: BlogPost }
test:
url: /company/:company_id//blog/:blog_id
class: sfDoctrineMultiRoot
param: { module: company, action: show }
我需要这个网址:
/公司/24/mycompany/blog/post/13
如何传递到我的路线2模型以生成以下路线:
//Test route example
post_show:
url: /company/:id/:title_slug/blog/post/:post_id
param: { module: company, action: show }
class: sfDoctrineRoute
options: { model: MyCompany }
我如何在这里描述第二个模型,以获取URL的属性?可能吗
非常感谢。我以前用自定义route类做过,有点像这样:
<?php
class sfDoctrineMultiRoot extends sfRequestRoute {
public function matchesUrl($url, $context = array()) {
if (false === $parameters = parent::matchesUrl($url, $context)) {
return false;
}
$company = Doctrine_Core::getTable('Company')
->find($parameters['company_id']);
if (!$company) {
return false;
}
$blog = Doctrine_Core::getTable('Blog')
->find($parameters['blog_id']);
if (!$blog) {
return false;
}
$this->company = $company;
$this->blog = $blog;
return $parameters;
}
public function getCompany() {
return $this->company;
}
public function getBlog() {
return $this->blog;
}
public function generate($params, $context = array(), $absolute = false)
{
foreach ($params as $key=>$param) {
if (method_exists($param, 'getRawValue')) {
$params[$key] = $param->getRawValue();
}
}
if (isset($params['company']) && $params['company'] instanceof Company) {
$params['company_id'] = $params['company']->getId();
}
unset($params['company']);
if (isset($params['blog']) && $params['blog'] instanceof Blog) {
$params['blog_id'] = $params['blog']->getId();
unset($params['blog']);
}
unset($params['blog']);
return parent::generate($params, $context, $absolute);
}
}
url_for('test', array('blog'=>BlogObject, 'company'=>'CompanyObject'));
您可以通过url_为生成url,并将其链接到如下位置:
<?php
class sfDoctrineMultiRoot extends sfRequestRoute {
public function matchesUrl($url, $context = array()) {
if (false === $parameters = parent::matchesUrl($url, $context)) {
return false;
}
$company = Doctrine_Core::getTable('Company')
->find($parameters['company_id']);
if (!$company) {
return false;
}
$blog = Doctrine_Core::getTable('Blog')
->find($parameters['blog_id']);
if (!$blog) {
return false;
}
$this->company = $company;
$this->blog = $blog;
return $parameters;
}
public function getCompany() {
return $this->company;
}
public function getBlog() {
return $this->blog;
}
public function generate($params, $context = array(), $absolute = false)
{
foreach ($params as $key=>$param) {
if (method_exists($param, 'getRawValue')) {
$params[$key] = $param->getRawValue();
}
}
if (isset($params['company']) && $params['company'] instanceof Company) {
$params['company_id'] = $params['company']->getId();
}
unset($params['company']);
if (isset($params['blog']) && $params['blog'] instanceof Blog) {
$params['blog_id'] = $params['blog']->getId();
unset($params['blog']);
}
unset($params['blog']);
return parent::generate($params, $context, $absolute);
}
}
url_for('test', array('blog'=>BlogObject, 'company'=>'CompanyObject'));
或
要检索操作中的对象,可以调用:
$this->getRoute()->getBlog();
或
谢谢,但是我需要把这个新的路线类放在哪里?我如何告诉symfony使用它?谢谢。不管你把它放在哪里——symfony的自动加载器会找到它的。我建议在项目的lib文件夹中创建一个名为“route”的文件夹,并将其放入其中(名为sfDoctrineMultiRoot.class.php的文件)。添加文件后,您可能需要清除缓存。这既不是通用的,也不是可扩展的。我支持多目标条令路线的想法,但它应该类似于sfDoctrineRoute,具有指定模型和方法的能力。虽然我同意上面的jeremy的观点,但我碰巧已经有了代码,所以发布它是有帮助的。它可以被整理成通用的等等,也许有一天我会的,但有时它只是需要足够的工作。我写这篇文章的那天就是这样的一天。此外,我相信这比杰里米的解决方案要好,到目前为止,杰里米的解决方案是“从头开始”/咆哮。