我试图在我的src文件夹中使用一个类,DependencyContainer
,但它说类没有找到?
指数:
<?php
$dc = new MangoDependencyContainer();
文件结构:
src/
DependencyContainer.php
index.php
composer.json
composer.json:
{
"name": "mqwerty/ioc-container",
"type": "library",
"require": {},
"autoload": {
"psr-4": {
"Mango\": "src/"
}
}
}
DependencyContainer类:
<?php
declare(strict_types = 1);
namespace Mango;
class DependencyContainer
{
}
首先,您需要在索引中添加自动加载文件,如下所示
require __DIR__ . '/vendor/autoload.php';
你的index.php
会像这样
<?php
require __DIR__ . '/vendor/autoload.php';
$dc = new MangoDependencyContainer();
它会解决你的问题
自动加载不会自动发生;composer的设置是为了管理基于composer.json
的PSR设置的PSR自动加载的创建和更新。
在命令行中执行composer install
;这将基于你的composer.json
在供应商文件夹中生成自动加载文件,并创建一个composer.lock
文件,即使你没有任何依赖。
在这里,你需要在执行代码之前引导自动加载文件。
嘿,这个问题已经解决了很多次了,但我还是要解释一下,以防你不明白别人的问题。
所以我曾经也遇到过这个问题,你可以在我的个人资料中找到它。
psr基于您的路径工作。当你设置SRC路径时,
例如,你的布局是这样的:
vendor
your-vendor-name
your-package
src
App.php
Class.php
composer.json
那么你的psr位置应该在:
"/src">
之后和它之前应该像这样:
"your-vendor-name 软件包">
当使用一个类时,确保你编写的类名以大写字母开头,并且里面的类与文件名匹配,确保类的命名空间是这样的your-vendor-nameyour-package
和使用
$app = new your-vendor-nameyour-package(then the class name you want to use, so lets say, Class.php, then you would put Class() here)
希望这能解决你的问题