Symfony 3.3 演示项目

Symfony 3.3 demo project

我刚刚下载了 symfony 3.3 版本开发的框架,尝试在 11 月发布的下一个版本 Symfony 4 上玩一下,因为这个 link 解释 http://fabien.potencier.org/symfony4-demo.html.

我无法创建一个简单的控制器并执行 "Hello world"。

我只是用这段代码创建了一个 DemoController.php,显然是在 Controller 文件夹中:

namespace App\Controller;//namespace App;      <- WHAT I SHOULD PUT HERE?

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class DemoController extends Controller
{

    public function demoAction()
    {
         return new Response("asdasd");
    }
}

任何人都可以写下我应该添加到 routes.yaml 中的内容吗?在这种情况下,我决定不使用注释并使用 routes.yaml。请求的路由应该是“/demo”。我试过这个...

index:
    path:     /demo
    defaults: { _controller: 'App\Controller\DemoController::demo' }

我想这可能是最后一部分的问题。

除此之外,我是否应该修改bundles.php? 我试过这个...

return [
    Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
    Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
    App\Controller::class => ['all' => true], <- NOT SURE IF IT'S LIKE THIS...
];

这是一个或多或少的使用 Symfony Flex 3.3.10 的极简示例,紧随第一部分:http://fabien.potencier.org/symfony4-demo.html

composer create-project "symfony/skeleton:^3.3" flex33_10
cd flex33_10
composer require webserver
composer require cli

添加控制器

# src/Controller/DemoController.php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
#se Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class DemoController extends AbstractController
{
    public function demoAction()
    {
        return new Response('aaabbb');
    }
}

添加路线

# config/routes.yaml
demo:
    path: /demo
    defaults: { _controller: 'App\Controller\DemoController::demoAction' }

现在清除缓存(因为新添加的路由)并启动服务器

bin/console cache:clear    
bin/console server:start
# browse to: http://127.0.0.1:8001/demo

希望一切都会好起来。

注意定义路由时需要拼出完整的action方法名demoAction vs demo。减少魔法。

请注意,对于新应用程序,您的控制器应该扩展 AbstractController 而不是旧的基本控制器。 AbstractController 仍然为您提供所有您喜欢的控制器辅助函数,但限制了对容器的访问。您将需要注入控制器所需的任何其他服务。

有趣的东西。享受吧。