Загрузить класс из папки поставщика внутри автоматически загруженного класса из папки вне поставщика - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть php-приложение со структурой папок, подобной этой

-/app
-/vendor
-index.php

Мой файл vendor / autoload.php включен в файл index.php.Когда я вызываю класс от вендора, например upload () в файле «index.php», он загружается без проблем.Однако, если я вызываю тот же класс в методе из класса внутри папки «app», это показывает, что класс не найден.

Классы внутри папки «app» автоматически загружаются так:

"autoload": {
    "psr-4":{
        "App\\": "app/"
    }
},
"require": {
    "verot/class.upload.php": "dev-master"
}

Как я могу вызывать классы из папки vendor в автоматически загружаемых классах в папке приложения?

Редактировать:

Классы из папки приложения называются в "index.php" следующим образом

include("vendor/autoload.php");
$get_class = 'User';
require_once('app/'.$get_class.'.php');
$get_class = 'App\\'.str_replace('/', '\\', $class_name);
if(method_exists($get_class , 'uploadImage')) {     
 $class = new $get_class();
 $class->{ 'uploadImage' }();
}

Вот класс upload () , вызываемый в Пользователь класс

namespace App\User;

class User{
 public function uploadImage() 
 {
   $file = 'user.jpg';
   $handle = new upload($file);
 }
}

Вот сообщение об ошибке

Class 'App\upload' not found in app/User.php:20

1 Ответ

0 голосов
/ 25 декабря 2018

Это проблема пространства имен.Вам нужно либо добавить:

use upload;

в декларацию пространства имен в вашем App\User -файле, чтобы импортировать класс загрузки, либо вам необходимо использовать полное пространство имен для класса upload при его использовании:

$handle = new \upload($file); 

Подробнее о можно прочитать в руководстве

Примечание: В размещенном коде $file не определено, когда выпытаемся использовать его в uploadImage() -функции.

Примечание 2: Если вы включили vendor/autoload.php в верхнюю часть вашего index.php (что и должно быть),нет необходимости включать классы вручную в PHP.Автозагрузчик композиторов справится с этим автоматически.Просто: $user = new App\User.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...