直到几天前,才有可能使用新的(Symfony 3)目录结构创建一个新的Symfony项目.运行时composer create-project symfony/framework-standard-edition path/ "2.5.*",Composer会询问以下问题:
你想使用Symfony 3目录结构吗?[Y/N]
新结构提供了一些改进,例如console从app目录移动到bin目录,以及phpunit.xml.dist从app目录移动到根目录.缓存和日志目录已移至新var目录.
看一下这个答案(由我编写),以获取完整的更改列表.
但是,全新安装的标准发行版不再提供此选项.似乎问题已于7月16日被删除,因为新的目录结构造成了太多的混乱,特别是对于新用户.在GitHub上也可以看到这个问题.
是否仍然可以使用新的目录结构创建项目?
Nic*_*tel 17
仍然可以触发问题,并将项目转换为新的目录结构.(但仅在您创建新项目时,即运行composer create-project)
为此,您需要将SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE环境变量设置为true.这可以通过预先添加SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true到Composer命令来完成.
因此,要创建新项目,请在终端中运行以下命令:
SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true composer create-project symfony/framework-standard-edition path/ "2.5.*"
Run Code Online (Sandbox Code Playgroud)
并且Composer会询问您是否需要新的目录结构.
正如barius在评论中所述,此功能已从每版本2.7.5的Symfony标准版中删除.如果你真的想使用Symfony 3结构,你可以通过两个步骤安装Symfony来获得它:
symfony/symfony包的版本约束,这样您仍将获得最新版本.因此,从命令行执行以下命令:
SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true composer create-project symfony/framework-standard-edition project-directory/ "2.6.*"
cd project-directory
composer require symfony/symfony ^2.7
Run Code Online (Sandbox Code Playgroud)
注意:我实际上并不推荐这个,因为这不是创建新Symfony项目的官方推荐方法.因此,除非您真的知道自己在做什么,否则只需使用Symfony Installer来创建新项目.
要在symfony2(> = 2.5)中创建新的symfony3目录结构,您必须执行以下操作:
打开shell /命令提示符并运行follwoing命令以设置临时环境变量:
Linux的:
export SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true
Run Code Online (Sandbox Code Playgroud)
视窗:
set SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true
Run Code Online (Sandbox Code Playgroud)
创建新的symfony3目录结构的问题是在设置环境变量后开箱即用
要从任何2.7和2.8版本创建新的目录结构,需要执行以下步骤:
安装所需的2.7及更高版本(使用2.7和2.8测试),目前安装2.7.7
composer create-project symfony/framework-standard-edition myproject "2.7.*"
Run Code Online (Sandbox Code Playgroud)
然后编辑composer.json并添加一个update-directory-structure:
composer.json:
--- snip ---
"scripts": {
"post-install-cmd": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
],
"post-update-cmd": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
],
"update-directory-structure": [
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::defineDirectoryStructure"
]
},
--- snip ---
Run Code Online (Sandbox Code Playgroud)
之后就跑了
composer run-script update-directory-structure
Run Code Online (Sandbox Code Playgroud)
用'y'回答你已经完成了:
> Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::defineDirectoryStructure
Would you like to use Symfony 3 directory structure? [y/N]
Run Code Online (Sandbox Code Playgroud)
console现在位于的文件bin/console必须进行调整:
更改
$loader = require __DIR__.'/autoload.php';
Run Code Online (Sandbox Code Playgroud)
至
$loader = require __DIR__.'/../app/autoload.php';
Run Code Online (Sandbox Code Playgroud)
然后AppKernel在文件中将以下方法添加到类中app/appKernel.php:
public function getRootDir()
{
return __DIR__;
}
public function getCacheDir()
{
return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
}
public function getLogDir()
{
return dirname(__DIR__).'/var/logs';
}
Run Code Online (Sandbox Code Playgroud)
学分: @davil
| 归档时间: |
|
| 查看次数: |
5019 次 |
| 最近记录: |