开始 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的站长有出单独教程的打算,也敬请关注