Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PSR-4自动加载选项没有在我的项目中加载类?_Php_Oop_Autoload_Psr 4 - Fatal编程技术网

Php PSR-4自动加载选项没有在我的项目中加载类?

Php PSR-4自动加载选项没有在我的项目中加载类?,php,oop,autoload,psr-4,Php,Oop,Autoload,Psr 4,当我尝试使用psr-4自动加载选项加载我的类时,我得到以下错误“致命错误:未捕获错误:在C:\xampp\htdocs\gacho\App\Core\Application.php:17堆栈跟踪:#0 C:\xampp\htdocs\gacho\public\index.php(16):App\Core\Application->u construct()#1{main}在第17行的C:\xampp\htdocs\gacho\App\Core\Application.php中抛出“这是我的代码结

当我尝试使用psr-4自动加载选项加载我的类时,我得到以下错误“致命错误:未捕获错误:在C:\xampp\htdocs\gacho\App\Core\Application.php:17堆栈跟踪:#0 C:\xampp\htdocs\gacho\public\index.php(16):App\Core\Application->u construct()#1{main}在第17行的C:\xampp\htdocs\gacho\App\Core\Application.php中抛出“这是我的代码结构和代码:

代码结构:

|gacho
  |- App
     |- Controller
        |- HomeController.php
     |- Core
        |- Application.php
     |- Model
     |- View
  |-public
     |- .htaccess
     |- index.php
  |-vendor
     |- composer
        |- autoload_classmap.php
     |- autoload.php
  |-composer.json
index.php:

<?php

use App\Core\Application;

define('ROOT', dirname(__DIR__) . DIRECTORY_SEPARATOR);
define('APP', ROOT . 'App' . DIRECTORY_SEPARATOR);
define('CONTROLLER', ROOT . 'App' . DIRECTORY_SEPARATOR . 'Controller' . 
DIRECTORY_SEPARATOR);
define('VIEW', ROOT . 'App' . DIRECTORY_SEPARATOR . 'View' . 
DIRECTORY_SEPARATOR);
define('MODEL', ROOT . 'App' . DIRECTORY_SEPARATOR . 'Model' . 
DIRECTORY_SEPARATOR);
define('CORE', ROOT . 'App' . DIRECTORY_SEPARATOR . 'Core' . 
DIRECTORY_SEPARATOR);

$modules = [ROOT, APP, CORE, CONTROLLER];

require_once __DIR__ . '\..\vendor\autoload.php';

$app = new Application();
Application.php:

<?php
 namespace App\Core;

 use App\Core\Controller;
 use App\Controller\HomeController;

 class Application
 {
    protected $controller = 'HomeController';
    protected $action = 'index';
    protected $params = [];

    public function __construct()
    {
       $this->prepareURL();
       if (file_exists(CONTROLLER. $this->controller . '.php')) {
        $this->controller = new $this->controller;
        if (method_exists($this->controller, $this->action)) {
            call_user_func_array([$this->controller, $this->action], $this->params);
          }
       }
    }

protected function prepareURL()
{
    $request = trim($_SERVER['REQUEST_URI'], '/');
    if (!empty($request)) {
        $url = explode('/', $request);
        $this->controller = isset($url[0]) ? $url[0].'Controller' : 'HomeController';
        $this->action = isset($url[1]) ? $url[1] : 'index';
        unset($url[0], $url[1]);
        $this->params = !empty($url) ? array_values($url) : [];
     }
  }
}

FQCN是
App\Core\Application
,路径是
App\Core\Application.php
。使用PSR-4,它将尝试从
App\Core\Application.php
加载,但该路径不存在(至少在区分大小写的文件系统中不存在)


最好的选择是更改目录结构以匹配名称空间。它们需要精确匹配,包括大小写。

尝试运行此命令:
编写器更新

请提供一个。此外,还应验证重现行为所需的步骤是否有效。特别要注意的是,自动装弹机的生成方式会对。。。顺便说一句:根据广泛接受的说法,你的类名
homeController
是无效的。考虑不要打破这些惯例,它会使事情变得更容易。看@ ReVo我做了一切,从那个帖子,它仍然不会工作。相同的错误。它正在MS Windows上运行,从一条错误消息中可以看出。看起来是这样的。不过,路径和命名空间并不完全匹配,这就是问题所在。@Arjan它在Windows 7上运行。我更改了每个目录以匹配名称空间,并点击composer dumpautoload,我仍然得到几乎相同的错误,只是更改了小写字母的致命错误:未捕获错误:在C:\xampp\htdocs\gacho\App\Core\Application.php中找不到类“HomeController”。php:17堆栈跟踪:#0 C:\xampp\htdocs\gacho\public\index.php(16):App\Core\Application->uuu construct()#1{main}在C:\xampp\htdocs\gacho\App\Core\Application.php的第17行“当我在Application.php中从受保护的$controller中删除名称HomeController时,如果有帮助,我不会得到错误,只是空白页。
<?php
 namespace App\Core;

 use App\Core\Controller;
 use App\Controller\HomeController;

 class Application
 {
    protected $controller = 'HomeController';
    protected $action = 'index';
    protected $params = [];

    public function __construct()
    {
       $this->prepareURL();
       if (file_exists(CONTROLLER. $this->controller . '.php')) {
        $this->controller = new $this->controller;
        if (method_exists($this->controller, $this->action)) {
            call_user_func_array([$this->controller, $this->action], $this->params);
          }
       }
    }

protected function prepareURL()
{
    $request = trim($_SERVER['REQUEST_URI'], '/');
    if (!empty($request)) {
        $url = explode('/', $request);
        $this->controller = isset($url[0]) ? $url[0].'Controller' : 'HomeController';
        $this->action = isset($url[1]) ? $url[1] : 'index';
        unset($url[0], $url[1]);
        $this->params = !empty($url) ? array_values($url) : [];
     }
  }
}
<?php
 namespace App\Controller;

 use App\Core\Controller;

 class HomeController extends Controller
 {
    public function index($id= '', $name='')
    {
       $this->view('home\index', [
         'name' => $name,
         'id' => $id
      ]);
      $this->view->page_title = 'Home Page';
      $this->view->render();
    }

    public function users()
    {
       $this->view('home\users', []);
       $this->view->page_title = 'Users';
       $this->view->render();
    }
}