我想知道,如果可能的话,我是否可以根据某些参数动态添加/注册新路由。
我知道路线很像
newsdetail:
url: /newsdetail/:id/:title
class: sfDoctrineRoute
options: { model: News, type object }
param: { module: articles, action: articledetail }
requirements:
id: \d+
sf_method: [get]
但是现在,有没有办法让我在动作中添加或添加这种路线? 我的问题是模块和操作可能会根据站点实例而改变...
所以,我已经构建了一个可以执行某些操作的组件和两个不同的模块,假设module1和module2,两者都包含组件。 由于不同的原因,我无法在路由文件中注册所有这些路由。 现在,user1必须具有转到module1的路由,并且user2必须具有module2的路由。 所以,我想在一个动作中添加路线。 我希望我能更好地解释它
答案 0 :(得分:1)
Here is an example about building dynamic route
基本上:
routing.load_configuration
这是一个已清理的代码段:
<?php
class frontendConfiguration extends sfApplicationConfiguration
{
public function configure()
{
$this->dispatcher->connect('routing.load_configuration', array($this, 'listenToRoutingLoadConfigurationEvent'));
}
public function listenToRoutingLoadConfigurationEvent(sfEvent $event)
{
$routing = $event->getSubject();
$products = Doctrine::getTable('Product')->findAll();
foreach ($products as $product)
{
if (0 == strlen($product->route))
{
continue;
}
$name = 'product_'.$product->id;
$route = new sfRoute(
$product->route,
array('module' => 'browse', 'action' => 'catalog', 'product' => $product->id),
array('product' => '\d+'),
array('extra_parameters_as_query_string' => false)
);
$routing->prependRoute($name, $route);
}
}
}
修改强>
您可以使用上下文从操作中检索路由:
$this->getContext()->getRouting()
因此,如果要从操作添加路线,可以执行以下操作:
$route = new sfRoute(
'/my-route',
array('module' => 'browse', 'action' => 'catalog', 'product' => 456),
array('product' => '\d+'),
array('extra_parameters_as_query_string' => false)
);
$this->getContext()->getRouting()->prependRoute('my-route', $route);
无论如何,我仍然没有真的了解你想要怎么做...即使在你上次编辑之后。
答案 1 :(得分:0)
为什么您没有相同的路由并根据凭据更改内容?