gpt4 book ai didi

php - Laravel - 调用未定义的方法 TrainingFacade::save()

转载 作者:可可西里 更新时间:2023-11-01 13:53:58 26 4
gpt4 key购买 nike

我正在构建 Laravel 4.2 应用程序并使用 Creolab 的模块包。这是一个用于管理公司培训的应用程序,因此我的模块称为培训。除了保存新创建的培训外,一切都很好。我在提交创建新表单时收到的错误是:

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

enter image description here

这些是我的 TrainingsController , Training Model , TrainingFacade , Trainings Service Providerroutes .我尝试的任何方法似乎都无法修复它。

最佳答案

你不需要在这里改变你的门面别名,但是你在这里有其他错误。

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

use Training;

但是模型 Training 不在根命名空间中,在根命名空间中有 TrainingFacade 因为您可能在 app.php 文件中定义了它这样:

'Training' => 'Roche\Trainings\Facades\TrainingFacade',

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

所以现在,Laravel 注入(inject)到你的构造函数中的不是 Training 模型而是 TrainingFacade(因为根命名空间中的 TrainingTrainingFacade 的别名)。

您在这里需要的是为您的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 将注入(inject)构造函数 Training 模型(而不是 TrainingFacade )。

编辑

您还可以进行一些测试,例如在您的 app.php 中更改您的 TrainingFacade 别名,例如:

    'TrainingFacade' => 'Roche\Trainings\Facades\TrainingFacade',

但是如果您像以前那样使用Training,您会收到以下错误:

Class Training does not exist

因为现在全局命名空间中将没有 Training 类(您更改了 facade 的别名)。

如果您完全删除 use Training;,您将获得:

Class Roche\Trainings\Controllers\Admin\Training does not exist

因为默认情况下类是从当前命名空间加载的,而您的 AdminTrainingsController 位于 Roche\Trainings\Controllers\Admin 命名空间

我希望现在一切都清楚了,如果还不清楚,您也可以看看 How to use objects from other namespaces and how to import namespaces in PHP我在这里详细解释了命名空间

关于php - Laravel - 调用未定义的方法 TrainingFacade::save(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26797561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com