symfony2.1捆绑版本混淆,用于symfony和sonata admin/knp菜单捆绑

tim*_*hew 6 symfony composer-php symfony-2.1 sonata-admin knpmenubundle

我想将symfony2.1用于新项目.我尝试用composer安装symfony2.但是存在多个错误/问题,因此我也以粗体字体样式对每个问题提出疑问.有时我不知道我是否以正确的方式做到了.

我想使用稳定版本,所以我选择了2.1.0版本而不是dev/master.

php composer.phar create-project symfony/framework-standard-edition symfony v2.1.0
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

Installing symfony/framework-standard-edition (v2.1.0)
  - Installing symfony/framework-standard-edition (v2.1.0)
    Downloading: 100%

    Created project in symfony
    Loading composer repositories with package information
    Installing dependencies from lock file
    Your requirements could not be resolved to an installable set of packages.

      Problem 1
        - Installation request for symfony/symfony == 2.1.9999999.9999999-dev -> satisfiable by                                               symfony/symfony 2.1.x-dev.
        - Can only install one of: symfony/symfony dev-master, symfony/symfony 2.1.x-dev.
        - Installation request for symfony/symfony == 9999999-dev -> satisfiable by symfony/sym                                              fony dev-master.
Run Code Online (Sandbox Code Playgroud)

所以我做了一个php composer.phar update,安装依赖项没有错误.

但我注意到大多数捆绑都没有稳定的版本.例如doctrine/common(2.3.x-dev),这里是完整列表

Loading composer repositories with package information
Updating dependencies
  - Installing doctrine/common (2.3.x-dev 605b1b8)
    Cloning 605b1b8b5a7bc8daf9111fb35483e5708e30de35

  - Installing doctrine/dbal (2.3.x-dev 239630b)
    Cloning 239630b61f03f39d198441eced1bfffb7b0e61d1

  - Installing twig/twig (dev-master 68b8c46)
    Cloning 68b8c4619c5bbe82bd345fe56070dec8c356610a

  - Installing symfony/symfony (2.1.x-dev e7059b4)
    Cloning e7059b44c78ca8e1e892adb4d93b5a482f4eb9b3

  - Installing swiftmailer/swiftmailer (dev-master e12e4ef)
    Cloning e12e4ef3a9d6dd60fb734a01984a6e6627aea764

  - Installing doctrine/orm (2.3.x-dev 4d9f24b)
    Cloning 4d9f24b2eef3af3a3e76c773994c19bbb0706f88

  - Installing doctrine/doctrine-bundle (dev-master v1.0.0)
    Cloning v1.0.0

  - Installing twig/extensions (dev-master f904575)
    Cloning f904575642b1213db69b4a98f08397e722ba1cae

  - Installing kriswallsmith/assetic (dev-master dfbb776)
    Cloning dfbb776288baf9319d1693195af2cb6e00729901

  - Installing symfony/assetic-bundle (dev-master 4e7e8a0)
    Cloning 4e7e8a039fa19434f04558473adbb201118af942

  - Installing symfony/swiftmailer-bundle (dev-master d2eae93)
    Cloning d2eae9385c029cbac031a90e6d2abc74b889a562

  - Installing monolog/monolog (dev-master a929570)
    Cloning a929570bb7688b39fefe4106f0ecf0ac35f37647

  - Installing symfony/monolog-bundle (dev-master v2.1.0-RC2)
    Cloning v2.1.0-RC2

  - Installing sensio/distribution-bundle (dev-master 9892129)
    Cloning 98921298951598e8707258cba2b6180b96faa91c

  - Installing sensio/framework-extra-bundle (dev-master v2.1.0)
    Cloning v2.1.0

  - Installing sensio/generator-bundle (dev-master v2.1.0-RC2)
    Cloning v2.1.0-RC2

  - Installing jms/metadata (1.1.1)
    Downloading: 100%

  - Installing jms/cg (1.0.0)
    Downloading: 100%

  - Installing jms/aop-bundle (1.0.0)
    Downloading: 100%

  - Installing jms/di-extra-bundle (1.1.x-dev af21952)
    Cloning af219527024c584d7311aa855d7522429c5bdb67

  - Installing jms/security-extra-bundle (1.2.x-dev 9ab6ace)
    Cloning 9ab6aceda50fc7a2b07d741ba4b3f0695508afcb
Run Code Online (Sandbox Code Playgroud)

1a)这是对的吗?还是有其他解决方案吗?我的意思是使用稳定而不是开发模式的捆绑包

第二天,我又做了一个作曲家更新,并注意到一些库已更新:dev-master分支的所有库,在最后一天内有新的变化.
1b)所以我应该在开发我的应用程序时定期更新作曲家,合并新的错误修正等等?

$ php composer.phar update
Loading composer repositories with package information
Updating dependencies
  - Updating swiftmailer/swiftmailer dev-master (e12e4e => c97353)
    Checking out c97353b1ebffe25a224146f69d17efe24c093def

  - Updating monolog/monolog dev-master (a92957 => e5bf7b)
    Checking out e5bf7ba5d1df622b68d004b3c0277bc94286e1b7

  - Updating friendsofsymfony/user-bundle dev-master (24edb2 => 878b7c)
    Checking out 878b7c8320159fb09e8e94d446c498b00142b206

  - Updating sonata-project/notification-bundle dev-master (5e7b50 => 9cef7d)
    Checking out 9cef7d224f224b4e4327f200f9bd57b798d4ab0a

  - Updating knplabs/gaufrette dev-master (861110 => 5ac439)
    Checking out 5ac439cd46eb461043e6bb73dae717528f674a57

  - Updating sonata-project/media-bundle dev-master (d04a61 => 233511)
    Checking out 2335114dab6ea9680d174df157f5a7b4551a54dc
Run Code Online (Sandbox Code Playgroud)

因为我没有找到另一个解决方案,所以我继续并通过将此行添加"friendsofsymfony/user-bundle": "*"到composer.json来安装FOS UserBundle .我做了整个安装的东西,它完美地工作.

然后我开始通过添加"sonata-project/admin-bundle": "dev-master"到composer.json 来安装Sonata AdminBundle .我选择了dev-master版本,因为在http://packagist.org/packages/sonata-project/admin-bundle上我发现版本2.0.x-dev不适用于symfony2.1.
此外,AdminBundle对knplabs/knp-menu-bundle 有一个依赖:1.1.*
http://packagist.org/packages/knplabs/knp-menu-bundle上我看到版本v1.1.0还有另一个依赖项knplabs/knp-menu:1.1.*
然后在http://packagist.org/packages/knplabs/knp-menu我找到了4个以1.1开头的版本:

  • 1.1.x中-dev的
  • V1.1.2
  • V1.1.1
  • V1.1.0

2a)如果v在版本号之前有前导,是否有区别?

2b)当依赖性为1.1*时,这四个版本将使用哪个版本?

当我开始加载管理软件包deps时,我看到了结果:

$ php composer.phar update
Loading composer repositories with package information
Updating dependencies
  - Installing knplabs/knp-menu (1.1.x-dev v1.1.2)
    Cloning v1.1.2

  - Installing knplabs/knp-menu-bundle (v1.1.0)
    Downloading: 100%

  - Installing sonata-project/admin-bundle (dev-master 20d5e4a)
    Cloning 20d5e4a659bddb5fc0bcfc4755643dbc4e3f7ec1
Run Code Online (Sandbox Code Playgroud)

我安装了一些更多的奏鸣曲包(doctrine-orm-admin-bundle,user-bundle,page-bundle,media-bundle),并且出现了错误

  - Installing imagine/imagine (v0.3.0)
    Downloading: 100%



  [ErrorException]
  rename(C:\wamp\www\symfony\vendor/imagine/Imagine/avalanche123-Imagine-a23b4f5,afcc946468d0cf073686fe7e1ae19eb2): access denied
   (code: 5)
Run Code Online (Sandbox Code Playgroud)

3)但是当我重复这一步时,错误就消失了.这是正常的吗?

$ php composer.phar update
Loading composer repositories with package information
Updating dependencies
  - Installing imagine/imagine (v0.3.0)
    Downloading: 100%

  - Installing knplabs/gaufrette (dev-master 8611109)
    Cloning 8611109aeb0bd43fd88485c20fec7fc85b021b84

  - Installing sonata-project/media-bundle (dev-master d04a617)
    Cloning d04a617d81383a6e1ba65ee99c2ea4379e7daf4e
Run Code Online (Sandbox Code Playgroud)

然后我继续配置sonata admin bundle.我添加后创建一个帖子实体和PostAdmin并配置服务(顺便说一句:服务配置有点差),发现我忘记安装KNP菜单(错误是:non-existent service "knp_menu.factory)

我继续https://github.com/KnpLabs/KnpMenuBundle/blob/master/Resources/doc/index.md并查看安装说明的详细信息.但那已经过时了.自smyfony2.1.将$loader在autoload.php已经没有registerNamespaces功能了,因为这不是UniversalClassLoader类,它的作曲类加载器.所以我必须创建一个自己的UniversalClassLoader实例.并且路径完全不同,现在有一个父knplabs目录,子目录也发生了变化.

use Symfony\Component\ClassLoader\UniversalClassLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;

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

// intl
if (!function_exists('intl_get_error_code')) {
    require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

    $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
}

$universalLoader = new UniversalClassLoader();
$universalLoader->registerNamespaces(array(
        'Knp\Menu' => __DIR__.'../vendor/knplabs/knp-menu/src',
        'Knp\Bundle' => __DIR__.'/../vendor/knplabs/knp-menu-bundle'
));
$universalLoader->register();


AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

return $loader;
Run Code Online (Sandbox Code Playgroud)

4)为什么KnpMenu安装结构已经过时,为什么在github上只有一个主分支,而对于http://packagist.org上存在的版本没有任何内容?

我是symfony2和作曲家的新手,有时候很难理解这一切.

Wou*_*r J 7

1a)这是对的吗?还是有其他解决方案吗?我的意思是使用稳定而不是开发模式的捆绑包

Symfony21将标准为您选择最佳版本.您可以composer.jsonsymfony/framework-standard-edition包的文件中看到这些版本(symfony/symfony-standard在github上).

正如您所看到的那样,它使用的是2.1.*版本而不是dev-master版本,但由于最新版本的软件包以2.1它开头,因此会加载dev-master.后来,使用symfony2.2它不应该使用dev-master,而是最新2.1版本的软件包.

如果你想要一个静态版本,你可以*用你想要的subversion 替换它,但我不推荐这个,因为你没有得到bug修复.

1b)所以我应该在开发我的应用程序时定期更新作曲家,合并新的错误修正等等?

是的,不时更新您的依赖项是件好事.例如,如果你认为你发现了一个错误,或者你推了它production.

2a)如果在版本号之前有前导v,是否有区别?

正如我们在packagist文档所读到的(在管理包版本下),没有区别.你可以使用它们,如果你使用2.1.4它将寻找一个2.1.4版本或v2.1.4.

2b)当依赖性为1.1时,将使用这四个版本.*?

最新的1.1颠覆.例如,如果您的foobar包具有以下版本:1.1.1,1.1.2 .. 1.1.6.而且你需要安装1.1.*最新的(1.1.6).

3)但是当我重复这一步时,错误就消失了.这是正常的吗?

看起来CLI无法访问该文件,您可以在程序中打开它.当你第二次尝试访问它时.

4)为什么KnpMenu安装结构已经过时,为什么在github上只有一个主分支,而对于http://packagist.org上存在的版本没有任何内容?

第一个问题:我不知道为什么文档已经过时了.你应该进入vendor/composer/autoload_namespaces.php文件并将命名空间放在那里,然后它应该工作.或者,更好的选择是将这些命名空间添加到文件中的require设置composer.json.有关更多信息,请参阅composer autoload docs.

第二个问题:它也使用github上的标签.