如何在本地计算机上安装的服务器上编写作曲家软件包?

时间:2018-11-29 08:42:37

标签: php symfony composer-php

通过终端我安装了Ramsey / Uuid插件:

composer require ramsey/uuid

在我的PagesRepository.php中,我正在创建此功能:

use Ramsey\Uuid\Uuid;

  function generateUid()
  {
     $uuid = Uuid::uuid4();
     $uuid = $uuid->getHex();
     $uuid =  substr($uuid,0,10);

     return   $uuid;
  }

我正在使用我的PagesController.php中的函数

  $unique_id = PagesRepository::generateUid();
  $entity->setUnique_id($unique_id);

它在我的本地计算机上运行得很好,但是随后我通过git将其推送到服务器上,然后出现错误消息:

  

试图从命名空间“ Ramsey \ Uuid”中加载类“ Uuid”。你是否   忘记了“使用”声明   “ Symfony \ Component \ Validator \ Constraints \ Uuid”?

我无法在服务器上安装任何东西,因为它是共享主机,并且权限被拒绝,所以我将ramsey文件夹复制到服务器上的我的供应商文件夹中。但这并不能解决问题。

我不明白,为什么要使用Symfony验证器,因为它在本地计算机上不需要它。

2 个答案:

答案 0 :(得分:1)

这是因为composer自动生成的文件未链接您的文件夹或类(ramsey)。

因此,据我了解,您无法在共享主机上运行composer updatecomposer install,因此应将整个更新后的vendor文件夹上载到服务器。

然后,将自动更新诸如vendor\composer\autoload_psr4.php之类的自动生成的文件,并链接到诸如Ramsey\Uuid\Uuid之类的类。

点是

  

PHP命名空间不能自动包含类/文件。它使用作曲家的自动生成的链接文件和__auload magic函数加载类。

答案 1 :(得分:1)

如果您未在服务器中运行composer install,则至少需要将整个vendor文件夹复制到运行系统的任何位置。

例如,您已安装的软件包可能已经安装了其他依赖项,但是当仅传输该软件包的文件时,您不会复制它们。至少,您将需要生成的自动加载器文件。

由于您是在dev上创建安装并将其转移到生产环境的,因此建议您删除本地vendor文件夹,然后首先重新进行整个安装:

composer install --prefer-dist --no-dev --no-scripts --no-progress --no-suggest --classmap-authoritative --no-interaction

并将那个供应商文件夹转移到生产环境中。您应该确保安装过程中不包括任何其他步骤(启用捆绑包,创建配置文件等),但是我希望您能在某个时候解决这个问题。

这样做之后,您可以重置前面的步骤,并定期进行composer install进行开发。