在没有任何框架的情况下理解 PSR-4 Composer

Understanding PSR-4 Composer without any framework

我尝试理解和学习它是如何工作的 PSR-4,因为我喜欢用这个标准重构,一个小应用程序。

根据几个手册,post堆栈溢出,我的结构和文件都没有问题。

/vendor
  /abkrim
     /rclub
        /src/
            ResellerApi.php

ResellerApi.php内容:

<?php

namespace Abkrim\Rclub;
// Also try namespace Abkrim\Rclub\ResellerApi;

class ResellerApi
{
   private $url;
   private $proxy;
   private $auth_userid;
   private $api_key;

  function __construct() {
      $this->url          = 'https://test.XXXXXX.com/api/domains/';
      $this->proxy        = '94.xxx.xxx.xxx:1111';
      $this->$auth_userid = '837465';
      $this->$api_key     = 'VU5EksjwGa28mA93tgviQd7eWgiSQLOz';
   }
   public function show() {
       //composer-autoload
   }
}

在我的 composer.json(全球)

{
  "name": "abkrim/resellerclub",
  "description": "Una pequeña app para modificar los contactos .ES",
  "license": "MIT",
  "authors": [
    {
      "name": "Abdelkarim Mateos",
      "email": "abdelkarim@tamainut.com"
    }
  ],
  "autoload": {
    "psr-4": {
      "Abkrim\Rclub": "vendor/abkrim/rclub/" //Final edition Work Fine 
      //"Abkrim\Rclub": "src/"
    }
  }
}

在我的工作目录 /reseller.php

<?php

use Abkrim\Rclub\ResellerApi;

require_once __DIR__.'/vendor/autoload.php';  // That it's he question. If not put autoload, not work.

// Also try below with up comment
//  use Abkrim\Rclub;

$con = new ResellerApi();
$con->show();

PHPstorm 不显示错误。

但是php显示错误...

PHP Fatal error:  Class 'Abkrim\Rclub\ResellerApi' not found in /Volumes/iDatos/abkrim/ownCloudTDC/tamainut/desarrollo/resellerclub/reseller/reseller.php on line 7

已编辑: 在文件 vendor/composer/autoload_psr4.php

上 运行 composer dump-autoload(或 composer update)之后
<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Abkrim\Rclub' => array($baseDir . '/src'),
);

太多手册显示示例,但它与 Laravel、Sympony、...我喜欢理解 PSR-4 ...

问题是您的文件不在您告诉自动加载器查看的位置。您的文件在 /vendor/abkrim/rclub/src/ResellerApi.php 中并且您已经告诉自动加载器命名空间 Abkrim\Rclubvendor/abkrim/rclub/ 中,因此通过指定 Abkrim\Rclub\ResellerApi 您告诉自动加载器 ResellerApi 在 /vendor/abkrim/rclub/ResellerApi.php,看到问题了吗?您错过了 src 文件夹。

尝试将您的 composer.json 文件更改为:

"autoload": {
    "psr-4": {
        "Abkrim\Rclub": "vendor/abkrim/rclub/src/"
    }   
}

完成更改后,请确保 运行 composer dump-autoload 更新自动加载器。

或者,您可以更新 ResellerApi.phpreseller.php 文件以使用 Abkrim\Rclub\src