Я создаю приложение Laravel 4.2 и использую пакет модулей Creolab. Это приложение для управления тренингами компании, поэтому мой модуль называется Тренинги. Все работает хорошо, кроме сохранения недавно созданных тренировок. Ошибка, которую я получаю при отправке формы Создать новую:
Call to undefined method Roche\Trainings\Facades\TrainingFacade::save()
Это мои TrainingsController, Модель обучения, TrainingFacade, Провайдер услуг обучения а также маршруты. Ничто из того, что я пробую, кажется, не может исправить
Вам не нужно менять псевдоним фасада здесь, но у вас есть другая ошибка здесь.
В вашем AdminTrainingsController
ты хочешь использовать Training
модель, чтобы вы импортировали Training
до определения вашего класса таким образом:
use Training;
но модель Training
не в корневом пространстве имен, в корневом пространстве имен есть TrainingFacade
потому что вы, вероятно, определите это в своем app.php
подать файл таким образом:
'Training' => 'Roche\Trainings\Facades\TrainingFacade',
Это нормально, вам не нужно менять этот псевдоним фасада.
Так что теперь Laravel впрыснуть в ваш конструктор не Training
модель но TrainingFacade
(так как Training
в корневом пространстве имен есть псевдоним для TrainingFacade
).
Вам нужно импортировать правильное пространство имен для вашего Training
модель.
Когда мы смотрим на ваш Training
Модель класса мы видим код:
<?php namespace Roche\Trainings\Models;
class Training extends \Eloquent {
protected $guarded = array('id');
}
так что в Roche\Trainings\Models
Пространство имен.
Чтобы заставить его работать в AdminTrainingsController
вам нужно изменить:
use Training;
в:
use Roche\Trainings\Models\Training;
Теперь Laravel впрыснет в конструктор Training
модель (а не TrainingFacade
как это делалось).
РЕДАКТИРОВАТЬ
Вы также можете сделать несколько тестов, например, изменить в вашем app.php
ваш TrainingFacade
псевдоним, например:
'TrainingFacade' => 'Roche\Trainings\Facades\TrainingFacade',
но если бы вы имели use Training
как и раньше, вы получите следующую ошибку:
Класс обучения не существует
потому что не было бы Training
Класс в глобальном пространстве имен теперь (вы изменили псевдоним для фасада).
И если вы удалили use Training;
полностью, вы получите:
Класс Roche \ Тренинги \ Контроллеры \ Admin \ Тренинг не существует
потому что по умолчанию класс загружается из текущего пространства имен, а ваш AdminTrainingsController
в Roche\Trainings\Controllers\Admin
Пространство имен
Я надеюсь, что теперь все ясно, если бы не вы также могли бы посмотреть на Как использовать объекты из других пространств имен и как импортировать пространства имен в PHP где я объяснил больше о пространствах имен
Других решений пока нет …