在symfony 1.4中,如何从当前操作中调用另一个应用程序的操作?
答案 0 :(得分:7)
这里有博客文章:
它有一个插件:
并且有一些博客文章解释它:
http://rabaix.net/en/articles/2009/07/13/cross-link-application-with-symfony-part-2
(注意:两者都适用于symfony 1.2,但它们也适用于1.4)
要将前端路由到后端,有三个简单的步骤:
<强> 1。在后端配置中添加以下两种方法
这些方法读取后端路由,并使用它来生成路由。你需要提供它的链接,因为php不知道你如何为其他应用程序配置你的web服务器。
// apps/backend/config/backendConfiguration.class.php
class backendConfiguration extends sfApplicationConfiguration
{
protected $frontendRouting = null;
public function generateFrontendUrl($name, $parameters = array())
{
return 'http://frontend.example.com'.$this->getFrontendRouting()->generate($name, $parameters);
}
public function getFrontendRouting()
{
if (!$this->frontendRouting)
{
$this->frontendRouting = new sfPatternRouting(new sfEventDispatcher());
$config = new sfRoutingConfigHandler();
$routes = $config->evaluate(array(sfConfig::get('sf_apps_dir').'/frontend/config/routing.yml'));
$this->frontendRouting->setRoutes($routes);
}
return $this->frontendRouting;
}
// ...
}
<强> 2。您现在可以这样的方式链接到您的应用程序:
$this->redirect($this->getContext()->getConfiguration()->generateFrontendUrl('hello', array('name' => 'Bar')));
第3。由于编写起来有点乏味,您可以创建帮助
function link_to_frontend($name, $parameters)
{
return sfProjectConfiguration::getActive()->generateFrontendUrl($name, $parameters);
}
sfCrossLinkApplicationPlugin执行此操作,但是以更简单的方式,您将能够使用与此类似的语法:
<?php if($sf_user->isSuperAdmin()):?>
<?php link_to('Edit Blog Post', '@backend.edit_post?id='.$blog->getId()) ?>
<?php endif ?>
答案 1 :(得分:1)
这将是这样的:
public function executeActionA(sfWebRequest $request)
{
$this->redirect("http:://host/app/url_to_action");
}
在Symfony中,每个应用程序都独立于其他应用程序,因此如果您需要调用另一个应用程序的操作,则需要直接请求它。
每个应用程序由一个主控制器(前端,后端,webapp)表示,该控制器负责将每个请求传递给相应的操作(以及许多其他东西,如过滤器等)。
我真的建议你阅读这个,它会更加明确:Symfony - Inside the Controller Layer