SImple Symfony2 '控制器、路由器;模板.为什么我仍然看到欢迎页面?


SImple Symfony2 'Front Page' controller, router & template. Why do I still see the Welcome page?

我刚从Symfony 2.7.3开始。

我一直在读这本书,试图把对我来说新的概念拼凑在一起。

我已经把第一个简单的例子放在一起了——我的"首页"。

使用下面的代码,当我导航到 时,我希望看到一个空白页面,上面只有"TEST TEST"字样。
http://example.com/app_dev.php/

我看到的是标准的Symfony欢迎页面

Welcome to Symfony 2.7.3
Your application is ready to start working on it at: /srv/www/test1/symfony/
What's next?
Read Symfony documentation to learn
How to create your first page in Symfony

我不明白为什么我仍然看到这个,而不是我的"TEST TEST"。

我盯着这个,知道我一定错过了一些简单的东西,应该是显而易见的:-/但是什么?盯着它看对我没有任何好处。

为什么我看不到"TEST TEST",我需要在这里修复什么?

./app/config/routing.yml
    _frontpage:
        path:      /
        defaults:  { _controller: AppBundle:FrontPage:index }

./src/AppBundle/Controller/FrontPageController.php
    <?php
    namespace AppBundle'Controller;
    use Sensio'Bundle'FrameworkExtraBundle'Configuration'Route;
    use Symfony'Bundle'FrameworkBundle'Controller'Controller;
    use Symfony'Component'HttpFoundation'Request;
    class FrontPageController extends Controller
    {
        /**
         * @Route("/", name="index")
         */
        public function indexAction() {
            return $this->render('default/page-front.html.twig');
        }
    }
./app/Resources/views/base.html.twig
    <!DOCTYPE html>
    <html>
        <head>
            <title>{% block title %}this title{% endblock %}</title>
            {% block meta %}
                <meta charset="UTF-8" />
            {% endblock %}
            {% block stylesheets %}{% endblock %}
        </head>
        <body>
            {% block body %}{% endblock %}
            {% block javascripts %}{% endblock %}
        </body>
    </html>
./app/Resources/views/default/page-front.html.twig
    {% extends 'base.html.twig' %}
    {% block title %}Changed Title{% endblock %}
    {% block body %}
        <div><p>TEST TEST</p></div>
    {% endblock %}
    {% block stylesheets %}
    {% endblock %}

Symfony在默认安装中包含一个AppBundle。这个bundle包含一个默认控件,其中包含了'/'的默认操作。修改此控制器操作来处理其他路径,然后对应于'frontpage'的控制器操作将被执行。

在AppBundle'Controller'DefaultController中,修改indexAction,如下所示

class DefaultController extends Controller
{
    /**
     * @Route("/default", name="homepage")
     */
    public function indexAction(Request $request)
    {
        // replace this example code with whatever you need
        return $this->render('default/index.html.twig', array(
            'base_dir' => realpath($this->container->getParameter('kernel.root_dir').'/..'),
        ));
    }
}

为'/'路径声明了两次相同的配置。AppBundle因为

而获得优先级
app:
    resource: "@AppBundle/Controller/"
    type:     annotation
路由中的

行。

既然你说你从Symfony开始,建议的路径是删除AppBundleDefaultController类中的indexAction()方法的内容,并在那里添加你自己的逻辑。

在Symfony中没有什么是"硬连接"的,但是AppBundle + DefaultController +命名为homepage的路由通常被推荐用于定义应用程序的主页