如何在 Laravel 4.1 的控制器中使用不同的命名空间

how to use different namespaces in a controller in laravel 4.1

提问人:Onur 提问时间:5/7/2014 最后编辑:LaurenceOnur 更新时间:5/13/2014 访问量:5960

问:

我想做的是在控制器中使用不同的命名空间。我有一个这样的树方案:

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/文件夹中的控制器调用模型。因此,我应该添加命名空间,如下所示:

    use App\Modules\Facebook\Controllers\Facebook;

问题是,当我添加命名空间并同时使用 App::() 函数时,出现以下错误:

    Class 'App\Modules\Modulename\Controllers\App' not found

我认为它正在模块文件夹中查找功能。我该如何解决这个问题?App::()

PHP Laravel 模块 Laravel-4

评论

0赞 sidneydobber 5/7/2014
能否添加一些控制器命名空间。我认为你在那里做错了什么。

答:

1赞 Luke 5/7/2014 #1

如果你说

use App\Modules\Facebook\Controllers\Facebook;

那么你应该使用而不是......还是我没有正确理解你的问题?FacebookApp

如果你说

use App\Modules\Facebook\Controllers\Facebook as FacebookController;

您可以在文件中使用FacebookController

如果您需要访问根应用程序,则需要使用前导对其进行操作\

\App::make()

评论

0赞 Onur 5/7/2014
好的,我可以使用它。但主要问题是我想在同一个控制器中同时使用 laravel 的 App::() 功能。那次 App::make() 函数给了我这样的错误:找不到类“App\Modules\Facebook\Controllers\App”
1赞 sidneydobber 5/7/2014 #2

您可能正在创建一个不寻常的 namspace 方案。您似乎以不同的方式对模块中的每个类进行命名空间。您应该仅在模块中命名代码,如下所示:

// Adding Onur to the namespace prevents any future namespace collisions.
<?php namespace Onur\Facebook;

创建命名空间后,应添加要使用的名称空间之外的所有类,如下所示。

use Eloquent, Input, Validate, Etc;

这样可以防止在每个类实例前面添加 a,从而使代码难以维护且容易出错。它还为您提供了当前类中使用的所有类的良好概述。\

3赞 Simon Wicki 5/7/2014 #3

如果在命名空间内使用,它将被解释为类。AppApp\Modules\Facebook\ControllersApp\Modules\Facebook\Controllers\Facebook\App

由于您不想拥有以前的命名空间,因此请使用 before,例如:\App

\App::()

或者把 use 语句放在类的顶部,比如use App;