通过终端我安装了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验证器,因为它在本地计算机上不需要它。
答案 0 :(得分:1)
这是因为composer
自动生成的文件未链接您的文件夹或类(ramsey
)。
因此,据我了解,您无法在共享主机上运行composer update
或composer 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
进行开发。