个性化阅读
专注于IT技术分析

Symfony 4简介:创建第一个” Hello World”应用程序

本文概述

在项目中使用Symfony 2.8苦苦挣扎直到今天? 2017年12月30日发布了Symfony 4, 该版本引入了一个基于工具” Symfony Flex”的新工作流, 该工作流替代并改进了Symfony Installer和Symfony Standard Edition, 它使基于项目组成的项目成为可能, 而不是继承。根据Fabian Potencier和Symfony开发人员的说法, 这种新的工作方式更容易, 更灵活, 甚至功能更强大。

你需要知道的第一件事是, 与Symfony的主要版本一样, 项目结构已更改:

my-symfony-project/
├── assets/
├── bin/
│   └── console
├── config/
│   ├── bundles.php
│   ├── packages/
│   ├── routes.yaml
│   └── services.yaml
├── public/
│   └── index.php
├── src/
│   ├── ...
│   └── Kernel.php
├── templates/
├── tests/
├── translations/
├── var/
└── vendor/

现在, 捆绑软件已加载到/config/bundles.php文件而不是内核中。 Symfony 4没有已知的app / config / parameters.yml文件, 而是使用环境变量。环境变量存储在项目根目录的.env文件中, 大多数框架都使用其他语言来执行此方法。这也是《十二要素应用宣言》的建议之一。这导致了另一个巨大的变化, 众所周知的app_dev.php工具不再可用, 它被环境变量APP_ENV完全替换为具有dev和prod的可能值。

从一般的角度来看, 与Symfony 3相比有很多变化, 但是从理论上来说, 阅读文档应该很容易适应它。你甚至可以按照Symfony网站上的以下步骤将基于Symfony 3的应用程序升级到Symfony 4。为了熟悉Symfony 4工作流程, 我们将通过下载Symfony, 创建控制器, 基本路线并安装Web Profiler来创建Hello World应用程序。

要求

要开始创建第一个Symfony 4项目, 你需要在开发环境中:

  1. PHP> = 7.1:Symfony至少需要此版本的PHP才能运行。
  2. 已安装Composer:借助composer, 软件包, 依赖项和工具的安装变得更加容易。

在本文中, 我们将不着重于本地服务器的配置, 因为我们仅将PHP的内置Web服务器用于测试目的。

1.创建你的项目

要创建遵循标准文档的第一个Symfony项目, 我们将不使用Symfony Installer或标准版本, 而是可以从symfony / skeleton软件包下载的flex版本。该软件包包含任何基于Symfony 4的项目的基本结构, 可以使用以下命令进行安装:

composer create-project symfony/skeleton [your project name]

在这种情况下, 我们的项目名称将是沙箱, 因此要创建它, 我们的命令将是:

composer create-project symfony/skeleton sandbox

在命令行中运行命令将生成类似于以下内容的输出:

Installing symfony/skeleton (v4.0.0)
  - Installing symfony/skeleton (v4.0.0): Loading from cache
Created project in sandbox
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 21 installs, 0 updates, 0 removals
  - Installing symfony/flex (v1.0.44): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.6.0): Loading from cache
  - Installing symfony/console (v4.0.0): Loading from cache
  - Installing symfony/routing (v4.0.0): Loading from cache
  - Installing symfony/http-foundation (v4.0.0): Loading from cache
  - Installing symfony/event-dispatcher (v4.0.0): Loading from cache
  - Installing psr/log (1.0.2): Loading from cache
  - Installing symfony/debug (v4.0.0): Loading from cache
  - Installing symfony/http-kernel (v4.0.0): Loading from cache
  - Installing symfony/finder (v4.0.0): Loading from cache
  - Installing symfony/filesystem (v4.0.0): Loading from cache
  - Installing psr/container (1.0.0): Loading from cache
  - Installing symfony/dependency-injection (v4.0.0): Loading from cache
  - Installing symfony/config (v4.0.0): Loading from cache
  - Installing psr/simple-cache (1.0.0): Loading from cache
  - Installing psr/cache (1.0.1): Loading from cache
  - Installing symfony/cache (v4.0.0): Loading from cache
  - Installing symfony/framework-bundle (v4.0.0): Loading from cache
  - Installing symfony/yaml (v4.0.0): Loading from cache
  - Installing symfony/dotenv (v4.0.0): Loading from cache
Writing lock file
Generating autoload files
Symfony operations: 4 recipes (aa684fb587b2a7b45ff0bf0d50f5d7f2)
  - Configuring symfony/flex (>=1.0): From github.com/symfony/recipes:master
  - Configuring symfony/console (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/routing (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/framework-bundle (>=3.3): From github.com/symfony/recipes:master
Executing script cache:clear [OK]
Executing script assets:install --symlink --relative public [OK]


 What's next?


  * Run your application:
    1. Change to the project directory
    2. Execute the php -S 127.0.0.1:8000 -t public command;
    3. Browse to the http://localhost:8000/ URL.

       Quit the server with CTRL-C.
       Run composer require server for a better web server.

  * Read the documentation at https://symfony.com/doc

到此为止, 你已经具有100%功能的Symfony 4应用程序, 因此可以通过使用命令行切换到项目目录并使用以下命令启动服务器, 在浏览器中使用PHP的内置服务器进行测试:

REM switch to your project's directory
cd sandbox

REM Run the following command to start the application
php -S 127.0.0.1:8000 -t public

运行该命令后, 命令行中的输出将类似于:

内置Web服务器PHP for Symfony 4

并且, 如果你在喜欢的浏览器中访问提到的本地URL, 你将看到Symfony的欢迎消息:

Symfony 4欢迎页面

很棒不是吗?

2.创建你的第一个控制器

接下来, 我们将继续基于MVC的框架上最常见的任务, 即创建控制器。使用新的Symfony结构, 你将在项目的/ src目录中最初拥有一个Controller文件夹, 应用程序的控制器将位于该文件夹中。像往常一样, 在这种情况下, 控制器的名称空间将为App \ Controller, 因此你可以使用以下内容创建第一个控制器, 即DefaultController.php:

<?php
// src/Controller/DefaultController.php
namespace App\Controller;

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

class DefaultController extends Controller
{
    public function index()
    {
        return new Response('
            <html>
                <body>
                    <h1>Hello Symfony 4 World</h1>
                </body>
            </html>
        ');
    }
}

如你所见, 我们已经注册了一个名为index的动作, 该动作将返回HTML作为第一个参数作为响应。由于这是一个演示, 我们的响应非常简单, 但是你可以通过像平常一样实现Twig或PHP Views来使其复杂。

3.注册和访问你的第一条路线

我们的控制器已经存在, 但是尚无法访问index动作, 因此你首先需要注册一条路线。但是在Symfony 4中, 你会找到config / routes.yaml文件。你可以按以下方式注册索引路由:

# config/routes.yaml
index:
    path: /
    defaults: { _controller: 'App\Controller\DefaultController::index' }

你也可以引用另一个包含更多路由的yaml文件, 但是我们将使其保持简单。现在, 如果你访问PHP内置服务器的路由(在我们的示例中为http://127.0.0.1:8000/), 则会发现:

Symfony 4你好世界

你好世界讯息。如你所见, 工作流程几乎与旧版本的Symfony相同, 但是你可能会感到不舒服, 因为该版本上没有诸如调试栏之类的东西。

4.安装Symfony Profiler

查看你的Hello World消息后发现奇怪的事情吗?每个Symfony项目上曾经使用过的美容调试栏在哪里?如前所述, Flex对于想要从小开始而又没有很多初始依赖关系的开发人员来说非常有用。这就是Symfony <= 4的工作方式, 在安装第一个symfony项目的过程中, 你将面对许多捆绑包的安装, 例如Doctrine, Swiftmailer以及某些情况下开发人员不需要的其他东西。 Symfony Flex旨在使基于Symfony的项目的创建非常简单且易于创建, 但是又不会失去构建具有许多依赖关系的更复杂项目的能力。

因此, 从理论上讲, 它的工作原理如下:无需安装任何东西。对于经验丰富的Symfony开发人员来说, 这种方法的问题是要手动安装你需要的每个软件包, 因此, Fabian Potencier提到了所谓”包装”的用法。这些软件包是在Composer上注册的常规Git存储库, 其中包含引用了一组相关软件包的composer.json文件。

已经有一个非常有用的用于调试目的的软件包, 其中包括phpunit-bridge和我们钟爱的调试栏之类的软件包, 即debug-pack, 你可以使用以下命令进行安装:

composer require debug-pack

注意

请记住, debug-pack是Symfony Flex定义的别名, 因此, 如果你尝试在基于非flex的symfony项目中执行相同的操作, 则会收到该软件包不存在的错误。

运行require命令后, 你将获得类似于以下内容的输出:

Using version ^1.0 for symfony/debug-pack
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 15 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-php72 (v1.6.0): Loading from cache
  - Installing symfony/var-dumper (v4.0.0): Loading from cache
  - Installing symfony/phpunit-bridge (v4.0.0): Downloading (100%)
  - Installing twig/twig (v2.4.4): Loading from cache
  - Installing symfony/twig-bridge (v4.0.0): Loading from cache
  - Installing symfony/web-profiler-bundle (v4.0.0): Loading from cache
  - Installing symfony/twig-bundle (v4.0.0): Loading from cache
  - Installing symfony/stopwatch (v4.0.0): Loading from cache
  - Installing monolog/monolog (1.23.0): Loading from cache
  - Installing easycorp/easy-log-handler (v1.0.3): Downloading (100%)
  - Installing symfony/monolog-bridge (v4.0.0): Downloading (100%)
  - Installing symfony/monolog-bundle (v3.1.2): Downloading (100%)
  - Installing symfony/debug-bundle (v4.0.0): Downloading (100%)
Writing lock file
Generating autoload files
Symfony operations: 6 recipes (348c2becb437cad80d6556e397d1c765)
  - Configuring symfony/phpunit-bridge (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/web-profiler-bundle (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/twig-bundle (>=3.3): From github.com/symfony/recipes:master
  - Configuring easycorp/easy-log-handler (>=1.0): From github.com/symfony/recipes:master
  - Configuring symfony/monolog-bundle (>=3.1): From github.com/symfony/recipes:master
  - Configuring symfony/debug-bundle (>=3.3): From github.com/symfony/recipes:master
Executing script cache:clear [OK]
Executing script assets:install --symlink --relative public [OK]

成功安装后, 你可以在项目中使用symfony的探查器:

Symfony 4 Web Profiler

还要注意, 你可以通过使用相同的标识符删除包来删除它:

composer remove debug-pack

但是, 如果你不想使用该包的所有捆绑包, 该怎么办?然后, 只需遵循仅安装所需和使用的Flex逻辑即可, 在这种情况下, 将使用以下命令将其作为Symfony的探查器:

composer require profiler

与调试包相比, 这将安装更少的软件包, 并向我们展示调试栏:

Using version ^1.0 for symfony/profiler-pack
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 8 installs, 0 updates, 0 removals
  - Installing twig/twig (v2.4.4): Loading from cache
  - Installing symfony/polyfill-php72 (v1.6.0): Loading from cache
  - Installing symfony/var-dumper (v4.0.0): Loading from cache
  - Installing symfony/twig-bridge (v4.0.0): Loading from cache
  - Installing symfony/web-profiler-bundle (v4.0.0): Loading from cache
  - Installing symfony/twig-bundle (v4.0.0): Loading from cache
  - Installing symfony/stopwatch (v4.0.0): Loading from cache
Writing lock file
Generating autoload files
Symfony operations: 2 recipes (d9ef4bccbc708c404cd724696fa62a4f)
  - Configuring symfony/web-profiler-bundle (>=3.3): From github.com/symfony/recipes:master
  - Configuring symfony/twig-bundle (>=3.3): From github.com/symfony/recipes:master
Executing script cache:clear [KO]

关于新Symfony, 还有许多工作要做和学习, 因此请继续关注, 阅读有关新版本的文档和新闻。 Fabian Potencier发布了Symfony 4的精彩介绍和快速演示, 因此你可能想看看一下本文可能未包含的更多要点。我们也跳过了许多细节, 最好从官方网站上阅读, 我们也建议你阅读Fabien Potencier的博客以获取有关SF4的新闻。

编码愉快!

赞(0)
未经允许不得转载:srcmini » Symfony 4简介:创建第一个” Hello World”应用程序

评论 抢沙发

评论前必须登录!