Класс Laravel 5.2 не найден, но класс есть с пространством имен

ОБНОВЛЕНИЕ 26 января 2016 г., 22:30 по восточному поясному времени: В результате долгих поисков в Google я обнаружил, что неправильно понимаю, как использовать пространства имен и пользовательские классы. Если у кого-то еще возникла эта проблема, прочитайте это руководство: http://www.techigniter.in/tutorials/how-to-add-custom-class-in-laravel-5/ Он короткий и очень простой для понимания. Это помогло решить эту проблему и подтолкнуло меня к следующей ошибке... :D

ПРОБЛЕМА: Попытка заново установить Laravel 5 и преобразовать мой код Laravel 4 в Laravel 5.

ПРОСЬБА: помогите мне найти ошибку и предоставьте подробные инструкции по ее устранению.

ОШИБКА: FatalErrorException в строке 4 AdditionalPCs.php: класс «App\Library\AdditionalPCs\additionalComputer» не найден

Примечания. Я поместил файл AdditionalComputer.php как в его собственный каталог App\Libary\additionalPCs, так и непосредственно в каталог App\Libary. Оба места выдают одну и ту же ошибку. Я использую пространства имен. (возможно неправильно)

Композитор.json

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

IndexController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Library\additionalPCs;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class IndexController extends Controller
{
    Protected $layout = 'master';
    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
        /** Wayne - 03-02-2014 - Moved for loop to a method within its own class. */
        $numberofpcs = new additionalPCs();
        $addtpcs=$numberofpcs->display();
        $this->layout->content = View::make('index')->with('addtpcs', $addtpcs)->with('businesstypelist', businesstype::dropdown())->with('contracttermlist',ContractTerm::dropdown());
    }
}

дополнительные ПК.php

<?php
namespace App\Library;

class additionalPCs extends additionalComputer {
    public function display() {
        return $this->displayMenu();    
    }
}

additionalComputer.php (я также пытался использовать App\Library\additionalComputer;)

<?php
namespace App\Library;

use App\Library\AdditionalPCs\additionalComputer;

class additionalPCs extends additionalComputer {
    public function display() {
        return $this->displayMenu();    
    }
}

person scrfix    schedule 27.01.2016    source источник
comment
ссылка которую вы дали битая   -  person Victor Anuebunwa    schedule 03.08.2017


Ответы (2)


Обновление после обновления сообщения:

Вы хотите использовать дополнительный компьютер, поэтому вам нужно импортировать его пространство имен, например:

<?php
    namespace App\Library;

    use App\Library\additionalComputer;

    class additionalPCs extends additionalComputer {
        public function display() {
            return $this->displayMenu();    
        }
    }

(Добавлен импорт пространства имен для AdditionalComputer)

Исходное сообщение:

У вас есть эта строка в вашей библиотеке:

namespace App\Library\AdditionalPCs;

Чтобы использовать Дополнительные ПК (например, в вашем контроллере), измените:

use App\Library\AdditionalPCs;

To

use App\Library\AdditionalPCs\AdditionalPCs;

Первый AdditionalPCs из вашего пространства имен, второй — имя вашего класса. Ваш класс AdditionalPCs находится в подпространстве имен AdditionalPCs.

Важно: это new AdditionalPCs() (см. начало A вместо a), это должно быть имя вашего класса точно! Это общее правило!

Будьте осторожны с вашими именами (чувствительность к регистру). Лучше использовать кодовые соглашения из PSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md

person schellingerht    schedule 27.01.2016
comment
Это не совсем работает. Я изменил пару элементов, но затем это приводит меня к другой ошибке. Я изменил использование на App\Library\additionalPCs; и удалил каталог AdditionalPCs, так что теперь файл AdditionalPCs.php находится в каталоге app\Library. Я получил следующую ошибку: класс «App\Library\AdditionalPCs\additionalComputer» не найден. Итак, я переместил свой файл AdditionalComputer.php в папку app\library и даже попытался создать каталог AdditionalPCs и поместить его туда, но безрезультатно. ошибка все еще остается. Не уверен, почему он ищет папку AdditonalPCs. - person scrfix; 27.01.2016
comment
Я добавил код для AdditionalComputer.php в исходное сообщение. - person scrfix; 27.01.2016
comment
Моя поправка верна. Я не знаю, но вы обновили весь код? Я все еще вижу неправильное пространство имен. ;-) И верно, App\Library\AdditionalPCs\additionalComputer не существует. дополнительный компьютер находится в пространстве имен App\Library, поэтому это App\Library\additionalComputer. - person schellingerht; 27.01.2016
comment
Я на 100% уверен, что это ошибка пользователя, а не ваше предложение. Я не сомневаюсь в этом. :D Я только что столкнулся с той же проблемой в другом классе, и она не работает. Я новичок в пространствах имен. Я читал о них, но это моя первая попытка их использования. Извините, я не обновлял код в stackoverflow, я только добавил дополнительный код для addtionalComputer.php. Я обновлю остальную часть. - person scrfix; 27.01.2016
comment
Я обновил ошибку и код того, что я использую в исходном сообщении. Я хочу сказать Большое спасибо за то, что нашли время, чтобы просмотреть это. - person scrfix; 27.01.2016
comment
Я тоже так думал и уже пробовал. Это не сработало. Ошибка все еще сохраняется. Я обновил код в исходном сообщении, чтобы отразить использование use App\Library\additionalComputer. Я даже пытался добавить его в AdditionalPCs. Он продолжает искать каталог с именем AdditionalPCs, даже если он не существует. Я не уверен, откуда он получает каталог. Класс «App\Library\AdditionalPCs\additionalComputer» не найден - person scrfix; 27.01.2016
comment
Эй, кажется, я понял, почему он ищет каталог с именем AdditionalPCs. Я провел агентский поиск дополнительных ПК и обнаружил, что файл autoload_classmap.php содержит 'App\\Library\\additionalComputer' => $baseDir . '/app/Library/AdditionalPCs/additionalComputer.php',. Я попытался запустить composer dump-autoload и php artisan clear-compiled, но это не сработало. Я не знаю, могу ли я удалить autoload_classmap.php или откуда он получает информацию. Единственные места, где у меня есть дополнительные компьютеры, относящиеся к классу, находятся в файле IndexController.php и addtionalPCs.php. - person scrfix; 27.01.2016
comment
Я думаю, мы сделали это. Я снова просмотрел код и обнаружил, что я изменил кое-что в дополнение к тому, что было указано. Изначально у меня было пространство имен App\Library\AdditionalPCs; и при устранении неполадок я изменил это на пространство имен App\Library\. Ну, каким-то образом мне удалось изменить его обратно на оригинал. Как только я удалил Дополнительные компьютеры и вернулся в App\Library, я получил следующую ошибку Неустранимая ошибка: класс 'App\Http\Controllers\View' не найден. Это означает, что он должен найти класс, и я могу перейти к устранению этой ошибки. - Спасибо за помощь. - person scrfix; 27.01.2016

Пространство имен каждого класса — это каталог контейнера этого класса, а не сам файл класса.

В вашем файле AdditionalPCs.php для пространства имен избавьтесь от \AdditionalPCs, это должно быть просто:

namespace App\Library;
person Makan    schedule 27.01.2016
comment
Если бы я мог отметить два из них как правильные, я бы также отметил это как правильное. Спасибо за помощь. - person scrfix; 28.01.2016
comment
@scrfix Если это было вам полезно, проголосуйте за это. Голосовать за полезную литературу — это обязанность, а не привилегия. - person Jonathan; 18.06.2016