簡體   English   中英

PHP:通過 PSR-4 自動加載說 class 未找到

[英]PHP: Autoloading via PSR-4 is saying class not found

我試圖在我的 src 文件夾DependencyContainer中使用 class ,但它說 class 找不到?

指數:

<?php
$dc = new \Mango\DependencyContainer();

文件結構:

src/
    DependencyContainer.php
index.php
composer.json

作曲家.json:

{
    "name": "mqwerty/ioc-container",
    "type": "library",
    "require": {},
    "autoload": {
        "psr-4": {
            "Mango\\": "src/"
        }
    }
}

依賴容器 class:

<?php

declare(strict_types = 1);

namespace Mango;

class DependencyContainer
{
}

首先,您需要像這樣在索引中添加自動加載文件

require __DIR__ . '/vendor/autoload.php';

而你的index.php會像這樣

<?php

require __DIR__ . '/vendor/autoload.php';

$dc = new \Mango\DependencyContainer();

它會解決你的問題

自動加載不只是自動發生; composer 設置為根據composer.json的 PSR 設置來管理 PSR 自動加載的創建和更新。

在 CLI 中composer install 這將根據您的composer.json在供應商文件夾中生成自動加載文件並創建一個composer.lock文件,即使您沒有任何依賴項。

從那里,您需要在執行代碼之前引導自動加載文件。

嘿,這已經解決了很多次,但我還是會解釋一下,以防你不理解其他問題。

所以我也遇到過這個問題,你可以在我的個人資料上找到它。

psr 根據您的路徑工作。 當你設置你的 src 路徑時,它就是從那里開始的,

例如,您的布局類似於以下內容:

vendor 
  your-vendor-name
    your-package
      src
        App.php
        Class.php
      composer.json

那么你的 psr 位置應該有這個: “/src”

之前應該是這樣的:

“您的供應商名稱\您的包裹\”

when using a class, make sure you composer class names start with an uppercase letter and the class inside matches the file name, make sure the class namespaces are something like this \your-vendor-name\your-package

並使用


$app = new \your-vendor-name\your-package\(then the class name you want to use, so lets say, Class.php, then you would put Class() here)

希望這可以解決您的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM