Laravel — вызов неопределенного метода TrainingFacade :: save ()

Я создаю приложение Laravel 4.2 и использую пакет модулей Creolab. Это приложение для управления тренингами компании, поэтому мой модуль называется Тренинги. Все работает хорошо, кроме сохранения недавно созданных тренировок. Ошибка, которую я получаю при отправке формы Создать новую:

Call to undefined method Roche\Trainings\Facades\TrainingFacade::save()

введите описание изображения здесь

Это мои TrainingsController, Модель обучения, TrainingFacade, Провайдер услуг обучения а также маршруты. Ничто из того, что я пробую, кажется, не может исправить

4

Решение

Вам не нужно менять псевдоним фасада здесь, но у вас есть другая ошибка здесь.

В вашем 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 где я объяснил больше о пространствах имен

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]