При запуске работы с моделями я получил следующую ошибку
Класс Post не найден.
Все, что я сделал:
– Создал модель с командой php artisan make:model
– Пытался получить все записи из табличных posts
с помощью echo Post::all()
Я использовал следующий код:
router.php
Route::get('/posts', function(){ $results = Post::all(); return $results; });
Post.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { protected $table = 'posts'; }
Что я пробовал
– Переименование класса
– Dump-autoload ( класс модели Laravel 4 не найден )
Laravel 5 способствует использованию пространств имен для таких вещей, как модели и контроллеры. Ваша модель находится под пространством имен App
, поэтому ваш код должен называть его следующим образом:
Route::get('/posts', function(){ $results = \App\Post::all(); return $results; });
Как уже упоминалось в комментариях, вы также можете use
или импортировать пространство имен в файл, поэтому вам не нужно указывать полный путь, например:
use App\Post; Route::get('/posts', function(){ $results = Post::all(); return $results; });
В то время как я занимаюсь коротким праймером на пространствах имен, я мог бы также упомянуть о способности псевдонимов класса. Это означает, что вы можете по существу переименовать свой класс только в области одного файла, например:
use App\Post as PostModel; Route::get('/posts', function(){ $results = PostModel::all(); return $results; });
Подробнее об импорте и псевдониме имен здесь: http://php.net/manual/en/language.namespaces.importing.php
У меня было такое же сообщение «Class [class name] not found», но это не было проблемой пространства имен. Все мои пространства имен были настроены правильно. Я даже попробовал composer dump-autoload
и это не помогло мне.
Удивительно (для меня) я тогда сделал composer dump-autoload -o
который, согласно помощи композитора, «оптимизирует пакеты PSR0 и PSR4, которые тоже загружаются с помощью карт классов, хороших для производства». Каким-то образом это делало композитора для правильного поведения и включения класса в файл autoload_classmap.php.
У меня была такая же ошибка в Laravel 5.2, оказалось, что пространство имен неверно в определении класса модели.
Я создал свою модель с помощью команды:
php artisan make:model myModel
По умолчанию Laravel 5 создает модель под папкой App
, но если вы хотите переместить модель в другую папку, как я, вы также должны изменить пространство имен внутри определения модели:
namespace App\ModelFolder;
Чтобы включить имя папки при создании модели, вы можете использовать:
php artisan make:model ModelFolder\myModel
Как сказал @bulk, он использует пространства имен.
Я рекомендую вам начать использовать IDE, он предложит вам импортировать все необходимые пространства имен ( \App\Post
в этом случае).
Если после изменения пространства имен и config/auth.php
он все равно не работает, вы можете попробовать следующее:
В файле vendor/composer/autoload_classmap.php
измените строку App\\User' => $baseDir . '/app/User.php',
App\\User' => $baseDir . '/app/User.php',
в App\\Models\\User' => $baseDir . '/app/Models/User.php',
App\\Models\\User' => $baseDir . '/app/Models/User.php',
В начале файла app/Services/Registrar.php
измените «использовать App \ User» в «App \ Models \ User»