【问题标题】:how to call modules' model and controllers files in a controller in laravel 4.1如何在 laravel 4.1 的控制器中调用模块的模型和控制器文件
【发布时间】:2014-05-13 23:20:21
【问题描述】:

我使用 laravel 4.1 创建了一个模块化系统我有一个树方案如下:

app/
app/controllers/
app/modules/
app/modules/modulename/
app/modules/modulename/controllers/
app/modules/modulename/controllers/modulecontroller.php
app/modules/modulename/models/
app/modules/modulename/models/modulemodel.php

我想做的是从 app/controllers/ 类中的控制器调用模型。 如何调用该模块及其模型?

【问题讨论】:

    标签: php laravel module laravel-4


    【解决方案1】:

    确保将您的/app/modules 添加到您的composer.json 文件的autoloadclassmap 并发出composer dump-autoloadphp artisan dump-autoload。然后你可以创建一个像new ModuleModel 这样的实例或者你给你的班级起的任何名字。虽然最好通过依赖注入传递给您的控制器。这样您的代码将更容易测试,因为您可以传入存根数据。

    public function __construct(ModuleModel $module_model_instance) {
       $this->module_model_instance = $module_model_instance;
    }
    

    【讨论】:

    • 好的,现在可以了,但我还有另一个问题。我在我的模型中使用了 eloquent,因此它给了我错误: Symfony \ Component \ Debug \ Exception \ FatalErrorException Class 'App\Modules\Modulename\Models\Eloquent' not found 我该如何解决这个问题?
    • 似乎您的代码已命名空间。如果是这样,请添加使用 Eloquent;在命名空间声明之后。
    • 它也有效。谢谢,但我现在注意到,如果我在 app/controllers/ 中的控制器中使用命名空间,我的以 App() 开头的函数就会崩溃。我该如何解决这个问题?
    • 您应该为您自己的命名空间之外的所有类添加use ...;。例如,您可以这样做use Eloquent, Input, Validation;
    • 你的意思是App::?如果是这样,请将其添加到您的 use ...; 中!
    【解决方案2】:

    我宁愿将此作为评论添加,但代表不足。

    如果 Composer 在 PSR-0(或 4)部分正确地自动加载了所有内容,那么您应该能够使用它的命名空间来引用它?

    我有时需要跑步

    composer dump-autoload
    

    刷新自动加载的文件,尤其是在使用 vagrant 时。

    希望这会有所帮助。我不确定我是否完全理解您的问题。

    【讨论】:

    • 好的,谢谢。但我还有另一个问题。我在我的模型中使用了 eloquent,因此它给了我错误: Symfony \ Component \ Debug \ Exception \ FatalErrorException Class 'App\Modules\Modulename\Models\Eloquent' not found 我该如何解决这个问题?
    • 在你的模型中使用 \Eloquent 而不是 Eloquent。
    • 正如@SUB0DH 所说,命名空间路径是相对的。您可以使用 \Eloquent 或 \Exception 等来引用“根”类,或者使用类顶部的“使用”语句来重新映射它们。例如使用 \mymodule\myUser 作为用户;使用 \Eloquent;因为顶部会正确映射它,这样您就不必更改班级中的其他提及。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多