Я безуспешно пытался разрешить ошибку в приложении laravel 5.2 (carfreak).
FatalErrorException in PropertyController.php line 85: Class 'App\Models\CarModel' not found
Я переместил модель пользователя по умолчанию в приложение / модели папки и внесла необходимые изменения, чтобы все работало нормально.
Теперь у меня есть новый контроллер CarController
и новая модель CarModel
, которые просто не работают. Кажется, это простая проблема с пространствами имен, но я не могу ее разрешить.
carfreak\app\Models\CarModel.php
namespace carfreak\Http\Controllers;
use App\Models\CarModel;
namespace carfreak\Models;
Я могу создавать разные версии ошибки, играя с CarController
но никакая перестановка, о которой я могу думать, сработала.
EDIT: добавлен контроллер и модель …
EDIT: добавлено:
Ирония заключается в том, что я могу php artisan make:model sanityCheck
и он создаст модель в корне \app
(т. php artisan make:model sanityCheck
Не в приложении \ models) … и эту модель можно назвать просто прекрасной. Если я верну свой CarController в корневой каталог и сменим его пространство имен соответствующим образом, оно все равно не сработает. Это похоже на то, что у меня есть глупая ошибка орфографии в имени класса или что-то в этом роде, но я скопировал и вставил имена классов в свое имя файла, объявление класса, «использование» объявлений и т. Д. И т. Д. все еще. оленья кожа. Работа. Aargh!
// это carModel
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class CarModel extends Model { // /** * The attributes that are mass assignable. * @var array */ protected $fillable = [ 'colourOfCar', ]; }
// это carController
<?php namespace carfreak\Http\Controllers; use Illuminate\Http\Request; //use \carfreak\app\Models\CarModel; use App\Models\CarModel; class CarController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function __construct() { $this->middleware('auth'); } public function store(Request $request) { // validate the data $this->validate($request, array( 'CarColour' => 'required|max:50' )); // store in the database $newCar = new CarModel; dd($request); } }
Это выглядит неправильно: \carfreak\app\Models\CarModel;
должен быть использован App\Models\CarModel
в this is carController
Корпус важен для Linux. Пространство имен обычно используется в PSR Aloader для поиска файла. И файловая система Linux чувствительна к регистру. Поэтому файл CareModel.php
должен находиться в App/Models/CarModel.php
Но я никогда не использовал Laravel …
Ну, вот оно. Я решил это, задав себе этот вопрос: если у меня будет столько проблем с именами, ссылками и организацией моих моделей, тогда, возможно, я смогу заставить ремесленника сделать это для меня.
Сообщение, которое меня задумало по-другому, было советом Мансура Ахтара: Как я могу дать указание ремесленнику сохранить модель в конкретном каталоге?
Попросите ремесленника сделать модель в нужном месте в первый раз. php artisan make:model Models/CarModel
В Контроллере use name-of-app\Models\CarModel;
к модели правильно, use name-of-app\Models\CarModel;
В моей проблеме может быть и не может быть промывка кеша. Во время каждого изменения я периодически перезапускал свой XAMPP, чтобы гарантировать, что кеширование не будет задействовано. Я также пробовал php artisan cache:clear