挑战!将 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

八月 12, 2013 在 2:47 下午

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

    Chris Yue

    八月 15, 2013 在 2:06 下午

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

     

发表评论

8 + 1 =