PSR4 - 在 composer 中使用自动加载而不是 require
PSR4 - using autoload in composer instead of require
我是 SLIM3 的新手,在使用 Composer 时按照 a tutorial 安装它。在本教程中,我尝试使用 autoload
来加载我所有的 classes 而不必使用 require
,这是我的文件结构:
dev
|── composer.json
|── index.php
|──── classes
|──── vendor
这是我的 composer.json
文件:
{
"require": {
"slim/slim": "^3.0",
"monolog/monolog": "^1.23"
},
"autoload": {
"psr-4": {
"": "classes/"
}
}
}
这里是 pdf.class.php
,它位于 classes
下方
dev
|── composer.json
|── index.php
|──── classes
|─ pdf.class.php
|──── vendor
class pdfClass {
public function testme(){
return 'i am working';
$this->logger->addInfo("Something interesting happened");
}
}
和 index.php:
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
// Require for loading the vendor libraries installed by composer
require 'vendor/autoload.php';
// require 'classes/pdf.class.php'; // << If I uncomment this line it works.
$config['displayErrorDetails'] = true;
$config['addContentLengthHeader'] = false;
$app = new \Slim\App(["settings" => $config]);
$container = $app->getContainer();
$app->post('/{controller}/{function}', function (Request $request, Response $response) {
$headers = $request->getHeaders();
$params = $request->getParsedBody();
$classname = $request->getAttribute('controller').'Class';
$controller = new $classname;
$function = $request->getAttribute('function');
$result = $controller->$function();
$response->getBody()->write($result);
return $response;
});
$app->run();
composer.json
中的 autoload
部分不应该允许我使用 class 而无需要求它吗?
不确定你的确切问题是什么,但 psr-4 要求文件名与 class 的名称完全相同,所以在你的情况下可能 Pdf.php
而不是 pdf.class.php
:
The terminating class name corresponds to a file name ending in .php.
The file name MUST match the case of the terminating class name.
我是 SLIM3 的新手,在使用 Composer 时按照 a tutorial 安装它。在本教程中,我尝试使用 autoload
来加载我所有的 classes 而不必使用 require
,这是我的文件结构:
dev
|── composer.json
|── index.php
|──── classes
|──── vendor
这是我的 composer.json
文件:
{
"require": {
"slim/slim": "^3.0",
"monolog/monolog": "^1.23"
},
"autoload": {
"psr-4": {
"": "classes/"
}
}
}
这里是 pdf.class.php
,它位于 classes
dev
|── composer.json
|── index.php
|──── classes
|─ pdf.class.php
|──── vendor
class pdfClass {
public function testme(){
return 'i am working';
$this->logger->addInfo("Something interesting happened");
}
}
和 index.php:
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
// Require for loading the vendor libraries installed by composer
require 'vendor/autoload.php';
// require 'classes/pdf.class.php'; // << If I uncomment this line it works.
$config['displayErrorDetails'] = true;
$config['addContentLengthHeader'] = false;
$app = new \Slim\App(["settings" => $config]);
$container = $app->getContainer();
$app->post('/{controller}/{function}', function (Request $request, Response $response) {
$headers = $request->getHeaders();
$params = $request->getParsedBody();
$classname = $request->getAttribute('controller').'Class';
$controller = new $classname;
$function = $request->getAttribute('function');
$result = $controller->$function();
$response->getBody()->write($result);
return $response;
});
$app->run();
composer.json
中的 autoload
部分不应该允许我使用 class 而无需要求它吗?
不确定你的确切问题是什么,但 psr-4 要求文件名与 class 的名称完全相同,所以在你的情况下可能 Pdf.php
而不是 pdf.class.php
:
The terminating class name corresponds to a file name ending in .php. The file name MUST match the case of the terminating class name.