首页 文章

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

提问于
浏览
14

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

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

新结构提供了一些改进,例如 consoleapp 目录移动到 bin 目录, phpunit.xml.distapp 目录移动到根目录 . 缓存和日志目录已移至新的 var 目录 .

请查看this answer(由我编写)以获取完整的更改列表 .

但是,全新安装的标准发行版不再提供此选项 . 这似乎是问题has been removed on July 16th,因为新的目录结构造成了太多的混乱,特别是对于新用户 . 另见this issue on GitHub .

是否仍然可以使用新的目录结构创建项目?

3 回答

  • 4

    仍然可以触发问题,并将项目转换为新的目录结构 . (但仅在您创建新项目时,即运行 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.*"
    

    和Composer会询问您是否需要新的目录结构 .

    更新

    正如barius在评论中所述,此功能已从每版本2.7.5的Symfony标准版中删除 . 如果你真的想使用Symfony 3结构,你可以通过两个步骤安装Symfony来获得它:

    • 使用版本约束创建一个新的Symfony项目,以便获得2.6版本,该版本仍然询问您是否要使用新的目录结构 .

    • 然后更改 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
    

    注意:我实际上并不推荐这个,因为这是not the official recommended way to create a new Symfony project . 因此,除非您真的知道自己在做什么,否则只需使用Symfony Installer来创建新项目 .

  • 17

    要在symfony2(> = 2.5)中创建新的symfony3目录结构,您必须执行以下操作:

    打开shell /命令提示符并运行follwoing命令来设置临时environment variable

    Linux的:

    export SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true
    

    视窗:

    set SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true
    

    版本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.*"
    

    然后编辑 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 ---
    

    之后就跑了

    composer run-script update-directory-structure
    

    回答'y',你就完成了:

    > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::defineDirectoryStructure
    Would you like to use Symfony 3 directory structure? [y/N]
    

    console 文件现在位于 bin/console ,必须进行调整:

    更改

    $loader = require __DIR__.'/autoload.php';
    

    $loader = require __DIR__.'/../app/autoload.php';
    

    然后将以下方法添加到文件 app/appKernel.php 中的 AppKernel 类:

    public function getRootDir()
    {
        return __DIR__;
    }
    
    public function getCacheDir()
    {
        return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
    }
    
    public function getLogDir()
    {
        return dirname(__DIR__).'/var/logs';
    }
    

    更新:knp university article about migrating to the new directory stucture

    学分:@davil

  • 6

    Symfony3 BETA1版本现已发布,

    因此,您可以直接使用composer来安装新的symfony3版本 .

    如果您尚未安装,请先关注Installing Composer .

    然后打开终端并输入以下命令:

    composer create-project symfony/framework-standard-edition symfony3 "v3.0.0-BETA1"
    

    注意:这里 symfony3 是将要创建的项目或目录的名称,您可以更改它 .

    Update: Symfony 3.0是稳定的当前版本,因此可以按照Official guide中的说明直接安装它 . 按照它进行最新版本安装 .

    composer create-project symfony/framework-standard-edition my_project_name

    您可以查看这些链接,

    What is the new Symfony 3 directory structure?

    Are your favorite bundle ready for #Symfony3?发表于@FecaBouffe

相关问题