【问题标题】:Symfony2 - call a controller from within a viewSymfony2 - 从视图中调用控制器
【发布时间】:2013-10-09 11:16:20
【问题描述】:

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

在我看来,我可能有:

  • 标题
  • 管理导航
  • 普通导航
  • 页面内容(分为三部分,某事列表,某事列表,主页面内容
  • 页脚

所有这些部分都是可重复使用的部分。我很可能总是在我的页面中有页眉、普通导航和页脚部分。

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

模板视图: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>

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

导航控制器:Controller/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:   -+ 

【问题讨论】:

  • 没有。不,不,不。这完全违反了 MVC 的约定。如果您希望您的菜单由控制器呈现,请改用帮助程序;不要尝试从视图中调用控制器。
  • 为什么是帮手?如果我有一个只显示导航的导航页面……然后是我想要使用完全相同的导航 sn-p 的页面……这里绝对不需要单独的概念。我是 Ror 和 c#.net MVC 4.0 的忠实粉丝,这就是它们的运作方式。这很简单并且完全有意义。但是,如果你想用你的替代方案来回答,我很乐意看看你是如何解决的!

标签: php symfony controller


【解决方案1】:
<?php echo $view['actions']->render(
    new \Symfony\Component\HttpKernel\Controller\ControllerReference(
        'YourBundle:NavigationController:index'
    )
) ?>

【讨论】:

  • FatalErrorException: Error: Class 'ControllerReference' not found in C:\wamp\www\Symfony\src\Something\FrameworkBundle\Resources\views\base.html.php 第 13 行 - 有什么想法吗?
  • @JamesT 给与命名空间怎么样?将ControllerReference 替换为\Symfony\Component\HttpKernel\Controller\ControllerReference
  • 是的,这行得通..哦,天哪..好吧,有没有办法在某处使用 using 所以我不需要到处引用这样一个丑陋的名字?整理时间?
  • 将此代码段放入可重复使用的模板中,并包含在您想要的任何位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多