symfony 4 框架安装与使用指南

注意:需要用PHP7.1版本进行操作。

创建一个新项目

第一步是创建项目。目前, 这需要通过composer create-project来完成。我们可能会释放一个工具来更快地引导项目。

走起:

composer create-project symfony/skeleton demo
cd demo

 

该命令将下载骨架, 该框架仅由一个composer.json文件组成。

 

然后, 它将文件提取到demo目录中, 并自动运行composer installsymfony/flex是要安装的第一个包, 以便它可以挂钩到Composer进程。当Composer安装 (或更新) 其他依赖项时, flex 在 flex 服务器上查找关联的“食谱”, 并执行它。通过添加到Composer输出的日志, 您可以看到在操作中的 Flex。

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

Some files may have been created or updated to configure your new packages.
Please review, edit and commit them: these files are yours.

              
 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 --dev for a better web server.

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

 

完成后, 您应该看到 "下一步是什么" 部分, 它解释了可能的下一步, 如运行make serve启动 PHP 内置的 web 服务器。在更进一步之前, 转到项目的目录: cd demo.

            
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 --dev for a better web server.

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

 

serve是添加到本地Makefile中的任务之一, 如 symfony/framework-bundle 食谱中所述。.

请注意, 某些命令在进程结束时自动安装并运行:

Executing script cache:clear [OK]
Executing script assets:install --symlink --relative public [OK]

 

同样, 这些脚本被添加到项目的composer.json文件中, 这是由 "symfony/framework-bundle" 食谱定义的。

现在是初始化 Git 的好时机::

git init
git add .
git commit -m "initial set of files"

使用git add .可以很好地处理创建一个 "好的" .gitignore文件。

请记住, 骨架只有一个文件,composer.json请立即检查demo/目录。还创建了一些文件。这些文件是根据已安装的软件包添加的, 如食谱中所述。

让我们现在检查目录结构。由于 "symfony/framework-bundle" 依赖关系, 大多数文件都已添加。.

.env 文件定义了APP_ENVAPP_SECRET环境变量:

###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=b1becb277ac66969a2f52321b1e5c028
#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
#TRUSTED_HOSTS=localhost,example.com
###< symfony/framework-bundle ###

这些注释允许 Flex "管理" 本节。当删除包时需要删除这些变量时, 这一点很有用。如果您删除这些注释, 那么 Flex 将无法自动管理这些变量了。有关类似示例, 可以查看.gitignore 。

如果您很好奇, 请检查新的 web 前端控制器的public/index.php

最有趣的文件在config/下。主要入口点是空的routing.yaml文件;您可以在此处添加项目的服务、参数和路由。config/packages/下, 还安装了默认配置, 用于symfony/framework-bundle 。请随意调整安装的配置文件或为您自己的需要添加更多。

最后, 但并非最不重要的是, FrameworkBundle现在已在bundles.php中注册。:

return [
    'Symfony\Bundle\FrameworkBundle\FrameworkBundle' => ['all' => true],
];

即使bundle没有食谱, 它也会用symfony-bundle类型检测composer包, 并自动为所有环境启用它们。这避免了在注册只是启用bundle的问题时创建食谱。

src/目录是您可以在其中存储 PHP 类的位置。composer.json中注册的App\命名空间下。请注意, 这是Kernel.php也被安装为App\Kernel的地方。.

现在, 是时候通过composer来安装一些新的依赖关系了。让我们先为您的项目添加一个更强大的 web 服务器:

composer req webserver

注意req require的快捷方式 (作曲家 CLI 支持任何不明确的快捷方式; 使用rem删除包)。

webserver是Symfony/web-server-bundle的别名。这是因为Symfony Flex知道如何将这些别名转换为完整的包名。Symfony/前缀始终是可选的。尝试Composer req workflow或Composer req LDAP。web-server-bundleq名称太长了,所以使用webserver或仅使用server

对于依赖项, Flex 还可以识别出比通常的composer多一些的版本, 主要是nextprevious、和ltsstable.

如:

composer req cli:next

 

在移除依赖项时, 别名也起作用:

composer rem cli

它还删除了bin/console二进制文件 (为了好玩, 请尝试此操作:composer rem framework-bundle).

还记得我在安装Symfony bundle时写过关于开发人员体验的文章吗?让我们疯狂地安装一些真正“复杂”的东西,比如基于Doctrine的管理后台。要用多少步才能成功?它可能比你预期的要少,而且肯定更有趣。

首先, 让我们安装EasyAdminBundle

composer req admin

除了安装管理后台 bundle程序外, 它还安装其所有可传递的依赖项, 并自动配置它们:TwigBundle、 SecurityBundle、 FrameworkExtraBundleDoctrineBundle.

admin是一个“通用”词。这就是为什么我写的Symfony Flex食谱是固执己见的原因。只能有一个包别名为admin。ORM是另一个通用单词,目前别名为DoctrineORM。

通过php -S 127.0.0.1:8000 -t public或bin/console server:start并转到http://localhost:8000/admin/运行 PHP 内置 web 服务器。你应该得到一个错误, 因为还没有Doctrine entities存在。让我们在src/Entity/Product.php中创建一个。:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="product")
 */
class Product
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    public $id;

    /**
     * @ORM\Column(type="string", length=100)
     */
    public $name;

    /**
     * @ORM\Column(type="decimal", scale=2)
     */
    public $price;

    /**
     * @ORM\Column(type="text")
     */
    public $description;
}

 

调整.env中的数据库配置:

###> doctrine/doctrine-bundle ###
DB_URL=mysql://root@127.0.0.1:3306/symfony?charset=utf8mb4
###< doctrine/doctrine-bundle ###

运行以下命令初始化数据库:

./bin/console doctrine:database:create
./bin/console doctrine:schema:update --force

 最后, 将Product添加到由admin管理后台管理的entity列表中 (config/packages/easy_admin.yaml):

easy_admin:
    entities:
        - App\Entity\Product

再次尝试http://localhost:8000/admin/ 。如果一切运作良好, 您应该能够管理产品。

Admin Generator Interface

 

下面是一些您可以尝试的好别名:

  • sec-checker 安装 SensioLabs 安全检查器;
  • req-checker 安装Symfony需求检查;;
  • log 以安装 MonologBundle 及其所有依赖项
  • template 安装Twig模板引擎;
  • mailer 安装 Swiftmailer;
  • profiler 安装 profiler;
  • ... 你明白了吧

由于不再需要symfony/symfony,您可以获得更细粒度的依赖关系,但是一个接一个地安装每个Symfony组件可能会很麻烦。为了减轻痛苦,我正在尝试一个新的概念:“packs”。Pack不过是在Composer上注册的常规Git存储库,它包含一个composer.json,它引用了一组相关的包。例如,我已经创建了一个debug-pack pack , 可通过composer req debug-pack安装。看看ORM pack 或  API pack。想象一下,假设web-packcomposer.json中没有引用任何内容,但是它与在public/如favicons、robots.txt下安装一组默认文件的菜谱相关联。不错?想象一下Travis, Blackfire, 或 Docker也是如此。还是安装与当前Symfony标准版完全相同的依赖项的包?你的想象力是无限的。用现成的packages, packs,和它们的相关食谱编写应用程序。

Flex 启用分发组合, 而不是继承新的方式更容易, 更灵活, 同时更强大。

现在,您可能是时候编写一些代码了。比如一些控制器和模板呢。

请记住, https://github.com/symfony/recipeshttps://github.com/symfony/recipes-contrib的食谱存储库现在也已公开。可以随便查看。

 

via http://fabien.potencier.org/symfony4-demo.html

可参考  https://www.chrisyue.com/symfony-4-demo.html

原创文章:转载请注明:来自lenix的博客,网址http://blog.p2hp.com/archives/5297

最后更新于 2018年5月15日

symfony 4 框架安装与使用指南
标签: