挑战!将 Symfony2 框架打包为一个文件——引导启动篇

挑战!将 Symfony2 框架打包为一个文件——引导启动篇

Chris Yue 2 comments
Posts

原文地址 http://fabien.potencier.org/article/70/packing-a-symfony-full-stack-framework-application-in-one-file-bootstrapping

开始 Symfony 项目最常见的方式是使用 Symfony 的标准发行版。它默认便提供了十分合理的项目文件结构,这样有新码农参与项目的时候会非常方便,你不用跟他墨迹他也知道模板,控制器,配置文件都放在什么地方。行,那我们从标准版开始我们的打包之旅:

$ composer.phar create-project -n symfony/framework-standard-edition se/ 2.3.0

安装好以后,让我们删掉一大堆可以删除的文件,留下必须的就行:

rm -rf LICENSE README.md UPGRADE* bin/ app/SymfonyRequirements.php \
   app/autoload.php app/bootstrap.php.cache app/AppCache.php app/check.php \
   app/console app/phpunit.xml.dist app/Resources src/ web/config.php \
   web/favicon.ico web/robots.txt web/apple-touch-icon.png web/app.php web/bundles/ \
   app/cache/* app/log/* .travis.yml app/.htaccess web/.htaccess

这样这些渣渣就不能阻挡我打包的挑战目标了。

接下来,让我们把配置文件都合并到一个文件里来:

# app/config/config_dev.yml
framework:
    secret:          $ecret
    router:
        resource: "%kernel.root_dir%/config/routing_dev.yml"
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    templating:
        engines: ['twig']
    session:         ~
    fragments:       ~

这时先清空`routing_dev.yml`,再干掉所有其他的配置文件。

同样我们将不需要的 bundle 也从 Kernl 类里干掉:

use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        return array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
        );
    }

    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
    }
}

再精简一下 web/app_dev.php 文件:

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Debug\Debug;

require_once __DIR__.'/../vendor/autoload.php';
Debug::enable();

require_once __DIR__.'/../app/AppKernel.php';

$kernel = new AppKernel('dev', true);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

composer.json文件也精简一下

{
    "name": "fabpot/onefile-challenge",
    "license": "MIT",
    "type": "project",
    "autoload": {
        "psr-0": { "": "src/" }
    },
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.3.*"
    }
}

因为此项目我放在了github上面的,所以.gitignore文件我还是留着:

/app/cache/*
/app/logs/*
/vendor/
/composer.lock

跑一下composer更新命令清除掉不需要的第三方插件:

$ composer.phar update

经过上述的抽脂瘦身不反弹手术以后,我们得到如下的文件结构:

app/
    AppKernel.php
    cache/
    config/
        config_dev.yml
        routing_dev.yml
    logs/
composer.json
vendor/
web/
    app_dev.php

如你所见我们现在只剩5个文件了,当然瘦身之后还是一个能正常工作的 Symfony 项目,今天的成就我发布在了 github上。

下一篇我将给大家展示一下 Kernel 类。

上一章节

挑战!将 Symfony2 框架打包为一个文件——引导启动篇 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

写作累,服务器还越来越贵
求分担,祝愿好人一生平安
天使打赏人

2 Comments

lewis

8月 12, 2013 在 2:47 下午

您好.请教一下, 能否抽时间写一篇关于单独使用symfony form组件和twig模板渲染的文章呢?或者有相关的文档或链接,可否提供一份.非常感谢!

 回复

    Chris Yue

    8月 15, 2013 在 2:06 下午

    你看过symfony的官方文档吗?写得还是比较详细,近期我跟symfony.cn的站长有出单独教程的打算,也敬请关注

     

发表评论

− 3 = 2

2021年4月
 1234
567891011
12131415161718
19202122232425
2627282930  
Composer CSS Firefox industrial metal JavaScript LeetCode Linux MySQL NGINX nu metal OAuth PHP PHP7 Shell Symfony Ubuntu Vim 全栈 到底系列 命令行 安全 教程 框架 算法 翻译