【问题标题】:Resolving package declaration conflicts in Laravel解决 Laravel 中的包声明冲突
【发布时间】:2014-08-15 04:25:05
【问题描述】:

我创建了一个工作台包,在它的包特定 composer.json 中需要 Guzzle。在项目的其他地方,composer.json 主文件中也需要 Guzzle,因为项目中的多个位置已经需要它。

因此,在创建我的项目后,我现在收到以下错误:

Fatal error: Cannot redeclare GuzzleHttp\Stream\create()
(
 previously declared
    in C:\www\site.dev\laravel\vendor\guzzlehttp\streams\src\functions.php:14)
    in C:\www\site.dev\laravel\workbench\ecomevo\mypackage\vendor\guzzlehttp\streams\src\functions.php
 on line 40
)

如何在自动加载包和项目所需依赖项的同时防止此类声明冲突?

【问题讨论】:

  • 您是否偶然需要两个不同的版本?
  • 根 composer.json 有 "guzzlehttp/guzzle": "~4.0" 并且特定于包的有 "guzzlehttp/guzzle": "~4" ,我现在意识到他们正在拉出略有不同的版本。会不会是这个问题?
  • 这可能是问题所在。由于它们是不同的版本,因此它们都将被实例化。尝试使版本相同,看看会发生什么。
  • 当我更改以匹配 composer.json 文件之间的版本时,我得到了同样的错误,但现在作曲家将它扔到composer update。

标签: php laravel laravel-4 composer-php


【解决方案1】:

在您的包中,在尝试实例化Guzzle 类之前使用class_exists。如果它已经存在,那么它已经被声明了,你应该可以继续使用它。

http://www.php.net//manual/en/function.class-exists.php

【讨论】:

  • Composer 正在通过它的自动加载功能进行实例化。
  • 嗯,奇怪的是它会抛出那个错误。对不起,我没有帮助。
猜你喜欢
  • 2017-11-09
  • 1970-01-01
  • 2021-08-11
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多