如何使用新的目录结构创建新的Symfony项目?

Nic*_*tel 14 symfony

直到几天前,才有可能使用新的(Symfony 3)目录结构创建一个新的Symfony项目.运行时composer create-project symfony/framework-standard-edition path/ "2.5.*",Composer会询问以下问题:

你想使用Symfony 3目录结构吗?[Y/N]

新结构提供了一些改进,例如consoleapp目录移动到bin目录,以及phpunit.xml.distapp目录移动到根目录.缓存和日志目录已移至新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来获得它:

  1. 使用版本约束创建一个新的Symfony项目,以便获得2.6版本,该版本仍然询问您是否要使用新的目录结构.
  2. 然后更改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来创建新项目.


c33*_*33s 6

要在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)

版本2.5和2.6

创建新的symfony3目录结构的问题是在设置环境变量后开箱即用

版本2.7和2.8

要从任何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)

更新:knp大学关于迁移到新目录结构的文章

学分: @davil