2013-10-09 96 views
0

我想对其中的控制器进行视图调用。类似于C#.NET MVC 4.0。Symfony2 - 从视图内调用控制器

在我看来,我可能有:

  • 联系导航
  • 正常航行
  • 页内容(分为三个部分,东西名单,别的东西名单,主页content
  • 页脚

全部这些部分是可重复使用的部分。我最有可能会始终拥有页面的标题,常规导航和页脚部分。

我的控制器执行数据库调用来获取模型并将其泵入我的视图。 我不想曾经有再担心这个代码,所以我只是想从任何视图该控制器的结果是:伪代码:

模板观点:base.html.php

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title><?php $view['slots']->output('title', 'Welcome!') ?></title> 
     <?php $view['slots']->output('stylesheets') ?> 
     <link rel="shortcut icon" href="<?php echo $view['assets']->getUrl('favicon.ico') ?>" /> 
    </head> 
    <body> 
     <?php echo $view['actions']->render(SomethingBundle:Navigation:index); ?> // THIS LINE HERE 
     <h1><?php $view['slots']->output('pageTitle') ?></h1> 
     <?php $view['slots']->output('_content') ?> 
    </body> 

所以这是我的模板页面,我希望能够在此页面中包含导航视图,但导航需要一个模型,因此它也取决于导航控制器。

导航控制器:控制器/ NavigationController

class NavigationController extends Controller 
    { 
     public function indexAction() 
     { 
      return $this->render(SomethingBundle:Navigation:index.html.php'); 
     } 
    } 

导航视图:index.html.php

<ul> 
    <li>Home</li> 
    <li>About</li> 
</ul> 

显然上面的代码不起作用。如何在视图中包含控制器的结果?

我从上面的代码得到的错误是:

[2/2] NotFoundHttpException: No route found for "GET Navigation:index" -+ 
[1/2] ResourceNotFoundException: -+ 
+0

人数人数人数这完全* *违背了MVC的约定。如果你想让你的菜单由控制器呈现,那么请使用助手来代替;不要尝试从视图中调用控制器。 –

+0

为什么这是一个帮手?如果我有一个只显示导航的导航页面...那么我想要使用完全相同的导航片段的页面......这里完全不需要单独的概念。我是Ror和c#.net MVC 4.0的忠实粉丝,这就是他们的运作方式。这很简单,完全合理。然而,如果你想用你的选择回答,我会很高兴看到你如何分类! – Jimmyt1988

回答

1
<?php echo $view['actions']->render(
    new \Symfony\Component\HttpKernel\Controller\ControllerReference(
     'YourBundle:NavigationController:index' 
    ) 
) ?> 
+0

FatalErrorException:错误:在C:\ wamp \ www \ Symfony \ src \ Something \ FrameworkBundle \ Resources \ views \ base.html.php中找不到类'ControllerReference'第13行 - 任何想法? – Jimmyt1988

+1

@JamesT给命名空间怎么样?用'\ Symfony \ Component \ HttpKernel \ Controller \ ControllerReference'替换'ControllerReference' – seferov

+0

是的,这是行得通的。哦,哦。好吧,有没有办法在某处使用,所以我不需要引用这样一个屁股丑陋的名字到处?整洁的时间? – Jimmyt1988

相关问题