Uncaught Ошибка "Класс не найден" в Laravel 5.8 - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь вызвать файл моей модели из другой папки. Я предоставил обе эти файловые структуры.

Я получаю эту ошибку:

Uncaught Error: класс 'App \ Models \ Providers' не найден в /Applications/XAMPP/xamppfiles/htdocs/pro/app/Scripts/Providers/1/Scrape.php:17

Я вызываю файл модели из папки скриптов, расположенной:

app/Scripts/Providers/1/Scrape.php

В этом классе у меня есть следующее:

namespace App\Scripts\Providers\1;
use App\Models;

Файл модели находится:

app/Models/Providers.php

В этом файле у меня есть следующее:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

Я не поделился полным содержанием, которое у меня есть в обоих этих файлах. Если вы хотите ознакомиться с полным содержанием этих файлов, сообщите мне.

Вот так выглядит Scrape.php

<?php
namespace App\Scripts\Providers\1;
use App\Models\Providers;

class Scrape {
    public function __construct() {
        $test = new \App\Models\Providers();
        die(print_r($test, true));
    }
}

$obj = new Scrape();

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

У вас не может быть пространства имен, начинающегося с цифры.

Пространства имен следуют тем же базовым правилам для имен переменных :

Допустимая переменная имя начинается с буквы или подчеркивания , за которым следует любое количество букв, цифр или подчеркиваний

(выделено мной).

Таким образом, ваше объявление

namespace App\Scripts\Providers\1

в основном недействительно .

С этого момента все ставки выключены.

Сначала измените ваше пространство имен на допустимый идентификатор (и я бы посоветовал выбрать что-то более разумное и узнаваемое, чем числа , у вас могут быть описательные имена и просто нет причин не делать этого):

namespace App\Scripts\Providers\GroupWhatever

ЛогическиВам придется переименовать папку, в которой находится этот файл.Раньше это было

app/Scripts/Providers/1/Scrape.php

, поэтому переименуйте этот каталог в

app/Scripts/Providers/GroupWhatever/Scrape.php

(В обоих случаях замените GroupWhatever на то, что имеет смысл для вашего приложения и домена).

С этого момента, если класс \App\Models\Providers существует в app/Models/Providers.php, он должен работать.

Важно:

Еще одна проблема, которая может существовать, заключается в том, чтоочень ясно, что такое Scripts/Scrape.php или как оно называется.

Это должно работать , если вы выполняете Scrape.php изнутри Laravel, вызывая контроллер или консольное приложение Laravel.

Если вы вызываете этот скрипт напрямую (например, с помощью php app/Scripts/Providers/1/Scrape.php (или исправленного app/Scripts/Providers/GroupWhatever/Scrape.php)), это просто не будет работать, поскольку логика автозагрузки вообще не запускается.

Есливы выполняете свой скрипт вручную, поверх вышеуказанных изменений вам нужно включить скрипт автозагрузки composer, который находится по адресу vendor/autoload.php.

По сути, добавьте эту строку ближе к началувашего Scrape.php:

require_once dirname( __DIR__ ) . '/../../../vendor/autoload.php';

(я думаю, чтоСоответствующее количество сегментов пути go-up-one-dir, но вы должны убедиться, что он совпадает с правильным путем в вашей установке).

Как только это произойдет, автозагрузчик будет запущен, и классыбыть найденным.

0 голосов
/ 10 июня 2019

В вашем Scrape.php измените ваше пространство имен на:

<?php
namespace App\Scripts\Providers\p1;

С PHP комментарий вручную ,

пространство имен (даже вложенное или вложенное пространство имен) не может быть просто числом, оно должен начинаться с буквы. Например, допустим, вы хотите использовать пространство имен для управления версиями ваших пакетов или управления версиями вашего API:

namespace Mynamespace \ 1; // Нелегально

Вместо этого используйте это: namespace

Mynamespace \ v1; // ОК

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