【问题标题】:Php psr-4 Class not Found Error using Composer使用 Composer 找不到 Php psr-4 类错误
【发布时间】:2016-03-22 21:37:38
【问题描述】:

我正在尝试在“wamp-server”上使用 php 来练习 MVC 概念

在本地目录中,我有 index.php 页面,用于使用 alto-router 包和 routes.php 文件进行基本路由:

<?php
  $router->map('GET','/test', 'Acme\Controllers\PageController@test' ,'test');

composer.json 文件是:

{
    "name": "eren/eren",
    "authors": [
        {
            "name": "Eren Ardahan",
            "email": "???@???.com"
        }
    ],
    "require": {
        "filp/whoops": "^1.1",
        "altorouter/altorouter": "1.1.0"

    },
    "autoload":{
      "psr-4":{"Acme\\":"src/"} 
    }
}

PageController.php 是

<?php namespace Acme\Controllers;

use Acme\Testing\Test;

class PageController
{
  public function test(){
    include(__DIR__ . "/../../views/test.php");
    //---Deleted lines
    $test = new Test; 
    $test -> test();
    /---
  }

}

acme目录下的Test.php为:

<?php namespace Acme\Testing;

class Test{
  public function test(){
    echo "Working";
  }
}

上面是视图目录中的test.php。当我删除PageController.php中注释的两行时它可以工作

<?php
 echo "TEST PAGE <br>";

但是这行有一个错误:

找不到类“Acme\Testing\Test”..

【问题讨论】:

  • 这是 Windows/WAMP,因此可能不是区分大小写的问题(尽管需要注意区分大小写),但如果将这些目录从 acme,controllers 重命名为 @987654330,结果相同@?另见stackoverflow.com/questions/24495987/…
  • 您的命名空间错误。它应该是 \Acme\acme 因为您的测试类不在地图测试中
  • @Micheal Michael Berkowski 我更改了目录名称,然后 composer var dump-autoload.. 但是仍然没有找到类.. routes.php 文件中有趣的东西我使用命名空间并且它有效
  • @Szenis 是对的..在我将 acme 目录名称更改为测试后它工作了..谢谢..

标签: php composer-php psr-4


【解决方案1】:

正如我在评论中所说,问题在于命名空间不正确。

我为将来可能会发现此问题的人创建了此答案。

您有一个名为 source 的目录,其中包含命名空间 Acme。当您在名为 acme 的源文件夹中添加另一个目录时,命名空间将是:

Acme\acme

您必须将 acme 文件夹更改为 Testing 以获得正确的命名空间。

【讨论】:

    猜你喜欢
    • 2015-12-16
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2016-11-18
    • 2015-12-10
    • 2019-04-20
    • 2018-06-01
    相关资源
    最近更新 更多