我正在使用Slim和Twig创建一个Web应用程序。我使用的库运行完美,我可以毫无问题地轻松调用它们。但是composer.json自动加载psr-4找不到我自己的类(psr-0也找不到)
这是我的文件系统:
project
|composer.json
|src
|public
| |index.php
|classes
| |Application.php
| |middlewares
| |SecurityMiddleware.php
|templates
|TemplateController.php
|main
|MainController.php
这是我的composer.json
:
{
"authors": [
{
"name": "Jean-Marc ZIMMER",
"email": "################@gmail.com",
"role": "Developer"
}
],
"require": {
"slim/slim": "^3.11",
"slim/extras": "*",
"twig/twig": "^2.5",
"slim/twig-view": "^2.4",
"slim/views": "^0.1.3"
},
"autoload": {
"psr-4": {
"src\\": "src",
"middlewares\\": "src/classes/middlewares",
"classes\\": "src/classes",
"templates\\": "src/templates"
}
}
}
然后src/classes/Application.php
:
<?php
namespace classes;
class Application extends \Slim\App {
public function __construct($container = array()) {
parent::__construct($container);
}
}
最后是我的index.php
文件:
<?php
require '../../vendor/autoload.php';
$app = new \classes\Application([
"settings" => [
"displayErrorDetails" => true
]
]);
$app->run();
当我运行composer dump-autoload
时,命令输出:
包含0个类的生成的自动加载文件
然后以状态代码0退出。它应该找到4个类,对吗?
运行该应用程序会显示错误:
致命错误:未捕获的错误:在/opt/lampp/htdocs/project/src/public/index.php:5中找不到类'classes \ Application'
我确定我遗漏了一些东西,表示一个命名空间之类的东西。谁能帮我吗?
编辑:
我尝试对转储自动加载使用--optimize或--classmap-authoritative选项。什么都没改变。
在composer.json中的文件夹名称中添加“ /”不会改变任何内容。
答案 0 :(得分:0)
我从另一个来源获得了解决方案。我个人不喜欢它,但是可以用。
文件系统没有更改。
composer.json
自动加载:
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
src/public/index.php
:
<?php
require '../../vendor/autoload.php';
$app = new \App\classes\Application([
"settings" => [
"displayErrorDetails" => true
]
]);
$app->run();
src/classes/Application.php
:
<?php
namespace App\classes;
class Application extends \Slim\App {
public function __construct($container = array()) {
parent::__construct($container);
}
}
我将从这个功能基础上开始工作,看看是否可以获得我想要的结果。如果可以,我将编辑此答案。
答案 1 :(得分:0)
确保您的composer.json
引用您的部署路径。例如:
Dockerfile
FROM php:7.2-apache
COPY src /var/www/html
COPY vendor /var/www/vendor
composer.json
{
"autoload": {
"psr-4": {
"Acme\\": "html/classes/"
}
}
}
即html/classes/
不是 src/classes/