当前位置: 首页 > 知识库问答 >
问题:

Composer自动加载在安装后脚本中失败

孟鸿德
2023-03-14

似乎composer在运行post install命令时无法加载psr-4类。

这是我的composer.json:

{
  "autoload": {
      "psr-4": {
        "Modules\\": "modules/",
        "ComposerScript\\": ""
      }
  },
 "scripts": {
    "post-install-cmd": [
      "ComposerScript\\ComposerScript::postInstall"
    ]
  }
}

ComposerScript.php包含:

<?php

namespace ComposerScript;

use Modules\Common\Services\RouterService;
use Composer\Script\Event as ComposerEvent;

class ComposerScript
{

    public static function postInstall(ComposerEvent $event)
    {

        $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir');

        require $vendorDir . '/autoload.php';

        echo 'class exist: ';
        var_dump(class_exists('Modules\Common\Services\RouterService'));

        $router = new \Modules\Common\Services\RouterService();
    }
}

运行composer安装后输出:

生成自动加载文件Composer脚本\Composer脚本::postInstall

类存在:bool(false)

PHP致命错误:在第19行的 /var/www/project/ComposerScript.php中找不到类模块\公共\服务\路由器服务

从apache运行项目时,autoloader可以正常工作。在本地也可以。可能是一些服务器配置,但哪一个。。。。

感谢您的帮助或推荐。

共有1个答案

葛承教
2023-03-14

问题是PSR-4自动加载:

http://www.php-fig.org/psr/psr-4/

文件夹应使用第一个字母大写,如类名:

{
  "autoload": {
      "psr-4": {
        "Modules\\": "Modules/",
        "ComposerScript\\": ""
      }
  }
}


$router = new \Modules\Common\Services\RouterService();

应该匹配:

-Modules
 -Common
  -Services
   -RouterService.php
 类似资料:
  • 这篇文章是对 PHP自动加载功能 的一个总结,内容涉及 PHP自动加载功能 、PHP命名空间、PSR0/PSR4标准 等内容。 一、PHP 自动加载功能 PHP 自动加载功能的由来 在 PHP 开发过程中,如果希望从外部引入一个 Class ,通常会使用 include 和 require 方法,去把定义这个 Class 的文件包含进来。这个在小规模开发的时候,没什么大问题。但在大型的开发项目中,

  • 我们如何以编程的方式安装 Composer? 如下载页面所指出的,这个安装程序包含一个签名,当安装程序代码发生改变时,它会随之发生改变,因此不应该长期依赖。 还有另一种方法,就是使用只对 UNIX 实用程序工作的脚本: #!/bin/sh EXPECTED_SIGNATURE="$(wget -q -O - https://composer.github.io/installer.sig)" p

  • 我运行的是$react-native run-android。它工作正常,我也能看到android模拟器的变化。我已经创建了3个组件,并在android设备上测试了它。 但是现在,突然,它问我不能从资产“index.android.bundle”加载脚本,我已经恢复了更改并开始,但我仍然看到这个错误。 在互联网上撒娇后,我表演了,1。npm 开始 2.反应原生启动 3.亚行终止服务器和亚行启动服务

  • 我有自己的小MVC框架,我使用composer psr-4自动加载。 在我自己的计算机上,它工作得非常好,但当我将它部署到我的Ubuntu服务器上时,它就不再工作了。(它再也找不到任何类了)我已经尝试了很多东西,但无论我尝试什么,它都不起作用。。。 我所尝试过的: 作曲家转储自动加载 作曲家更新 删除所有内容并再次上载 在互联网上搜索几个小时…:( 这是我的composer.json: 我只是不明

  • 1.4* 自动加载脚本机制 前文已提及,vim 脚本主要用 :source 命令加载,然而很多情况下又不需要手动执行 该命令。只要将脚本放在特定的目录下,vim 就有个机制自动搜寻并加载的机制。 Vim 插件搜索目录 首先要知道有 &runtimepath (常简写为 &rtp)这个选项。它与系统的环境变量 $PATH 有点类似,就是一组有序的目录名称,用于 Vim 在许多不同情况下搜寻 *.vi

  • 问题内容: 我刚刚通过Composer安装了Sebastian Bergmann的PHPUnit版本3.7.19,并编写了一个我想进行单元测试的类。 我想将所有类都自动加载到每个单元测试中, 而 不必使用它或将其放在测试的顶部,但这证明很困难! 这是我的目录结构的样子(后跟/斜杠表示目录,而不是文件): composer.json composer.lock composer.phar lib /