我正在构建一个Laravel 4.2应用程序,并且正在使用Creolab的模块包。这是一个用于管理公司培训的应用程序,所以我的模块称为培训。除保存新创建的培训外,其他所有方法都效果很好。提交“创建新表单”时收到的错误是:
Call to undefined method Roche\Trainings\Facades\TrainingFacade::save()
这些是我的TrainingsController,Training Model,TrainingFacade,Trainings Service Provider和routes。我没有尝试解决任何问题。
最佳答案
您无需在此处更改立面别名,但是此处还有其他错误。
在您的AdminTrainingsController
中,您想使用Training
模型,因此您可以通过以下方式在类定义之前导入Training
:
use Training;
但是模型
Training
不在根 namespace 中,在根 namespace 中存在TrainingFacade
,因为您可能是通过以下方式在app.php
文件中定义的:'Training' => 'Roche\Trainings\Facades\TrainingFacade',
没关系,您无需更改此外观别名。
因此,现在,Laravel而不是
Training
模型而是TrainingFacade
注入(inject)构造函数(因为根 namespace 中的Training
是TrainingFacade
的别名)。您需要在这里为
Training
模型导入正确的 namespace 。当我们查看您的
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将注入(inject)到构造函数
Training
模型中(而不是像往常那样注入(inject)TrainingFacade
)。编辑
您还可以进行一些测试,例如将
app.php
更改为TrainingFacade
别名,例如: 'TrainingFacade' => 'Roche\Trainings\Facades\TrainingFacade',
但是,如果像以前一样使用
use Training
,则会出现以下错误:因为现在在全局 namespace 中将不再存在
Training
类(您更改了Facade的别名)。如果您完全删除了
use Training;
,您将获得:因为默认情况下,类是从当前 namespace 加载的,而您的
AdminTrainingsController
在Roche\Trainings\Controllers\Admin
namespace 中我希望现在一切都清楚了,如果不是的话,您还可以看看How to use objects from other namespaces and how to import namespaces in PHP,我在其中解释了有关 namespace 的更多信息
关于php - Laravel-调用未定义的方法TrainingFacade::save(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26797561/