我正在构建一个Laravel 4.2应用程序,并且正在使用Creolab的模块包。这是一个用于管理公司培训的应用程序,所以我的模块称为培训。除保存新创建的培训外,其他所有方法都效果很好。提交“创建新表单”时收到的错误是:

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

这些是我的TrainingsControllerTraining ModelTrainingFacadeTrainings Service Providerroutes。我没有尝试解决任何问题。

最佳答案

您无需在此处更改立面别名,但是此处还有其他错误。

在您的AdminTrainingsController中,您想使用Training模型,因此您可以通过以下方式在类定义之前导入Training:

use Training;

但是模型Training不在根 namespace 中,在根 namespace 中存在TrainingFacade,因为您可能是通过以下方式在app.php文件中定义的:
'Training' => 'Roche\Trainings\Facades\TrainingFacade',

没关系,您无需更改此外观别名。

因此,现在,Laravel而不是Training模型而是TrainingFacade注入(inject)构造函数(因为根 namespace 中的TrainingTrainingFacade的别名)。

您需要在这里为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 加载的,而您的AdminTrainingsControllerRoche\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/

10-12 13:23