【问题标题】:Render Controller in Symfony doesn't workSymfony 中的渲染控制器不起作用
【发布时间】:2016-07-26 20:59:25
【问题描述】:

我使用 Symfony 3.1.2 并尝试在 base.html.twig 中实现一个简单的导航模板(twig)。

<!DOCTYPE html>
<html>
    <head>
        ...
    </head>
    <body>
    {{ render(controller('AppBundle:Navigation:topNavigation')) }}
    {% block body %}{% endblock %}
    {% block javascripts %}{% endblock %}
    </body>
</html>

默认目录下的navigation.html.twig模板是这样的

    <div id="navigation-wrapper">
        <ul id="navigation">
        {% for item in navigation %}
            <li><a href="{{ item.url }}">{{ item.label }}</a></li>
        {% endfor %}
        </ul>
    </div>

AppBundle/Controller 中的 NavigationController 长这样

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class NavigationController extends Controller
    {
        public function topNavigation()
        {
            $navigation = array(
                array("url"=>"/login", "label"=>"Login"),
                array("url"=>"/register", "label"=>"Registrieren")
             );

            return $this->render('default/navigation.html.twig', array(
                'navigation' => $navigation,));
        }
}

没有错误,NavigationController->topNavigation 没有运行,没有渲染,我不知道该怎么做。有人有想法吗?

【问题讨论】:

    标签: symfony-3.1


    【解决方案1】:

    一切都很好。每个控制器方法都必须有后缀 Action。你在NavigationController 中的方法应该是这样的:

    public function topNavigationAction() {
        $navigation = array(
            array("url" => "/login", "label" => "Login"),
            array("url" => "/register", "label" => "Registrieren")
        );
    
        return $this->render('default/navigation.html.twig', array(
                'navigation' => $navigation,
        ));
    }
    

    它肯定会起作用。

    【讨论】:

    • 谢谢,这行得通,忘记操作后缀是典型的初学者错误。感谢您的快速响应!
    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多