在没有任何框架的情况下理解 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\Rclub
在 vendor/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.php
和 reseller.php
文件以使用 Abkrim\Rclub\src
。
我尝试理解和学习它是如何工作的 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\Rclub
在 vendor/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.php
和 reseller.php
文件以使用 Abkrim\Rclub\src
。