通过终端I安装了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验证器,因为它在本地机器上不需要它。
发布于 2018-11-29 09:02:49
这是因为composer自动生成的文件没有链接您的文件夹或类(ramsey)。
因此,据我所知,您不能在共享主机上运行composer update或composer install,您应该将整个更新的vendor文件夹上载到您的服务器上。
然后自动生成的文件(如vendor\composer\autoload_psr4.php )将被更新,并具有指向类(如Ramsey\Uuid\Uuid )的链接。
点是
PHP名称空间不能自动包含类/文件。它用composer自动生成的链接文件和__auload魔术函数加载类。
发布于 2018-11-29 09:04:07
如果服务器中没有运行composer install,则至少需要将整个vendor文件夹复制到运行系统的任何位置。
例如,您已安装的包可能已安装了其他依赖项,但在仅传输该包的文件时,您不会复制它们。至少您需要生成的自动加载程序文件。
由于您在dev上创建安装并将其传输到生产中,我建议删除本地vendor文件夹,然后首先重做整个安装:
composer install --prefer-dist --no-dev --no-scripts --no-progress --no-suggest --classmap-authoritative --no-interaction并将那个供应商文件夹传输到生产部门。您应该确保安装过程中不包括任何其他步骤(启用包、创建配置文件等),但我希望您能在某个时候解决这个问题。
完成这些操作后,您可以重置前面的步骤,并为开发做一个常规的composer install。
https://stackoverflow.com/questions/53534884
复制相似问题