Laravel中的命名空间和自动加载

时间:2014-09-24 19:15:16

标签: laravel laravel-4 laravel-5

这可能是一个简单的问题,但我想知道如何在不在每个文件上声明use语句的情况下自动加载有用的类。

<?php namespace App\Http\Controllers;

use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Input;

class HomeController extends Controller
{
    public function index()
    {
        Input::get('query');
    }
}

如果我删除使用Illuminate \ Support \ Facades \ Input; 行,我会收到一个类未找到错误,因为我正在使用Input类。

是否有办法在Laravel 4中自动加载有用的类,如输入,响应,视图。在app.php中,别名有什么意义?

2 个答案:

答案 0 :(得分:2)

您可以使用以下两种方式导入输入类:

use Illuminate\Support\Facades\Input;

use Input;

然后您可以使用Input::get('query');代码。这就是PHP名称空间的工作方式 - 您还可以查看How to use objects from other namespaces and how to import namespaces in PHP以获取有关它的更多详细信息。

如果您不使用use语句导入课程,则可以使用\Input::get('query');\Illuminate\Support\Facades\Input::get('query');

别名允许您不使用完全限定的类,例如\Illuminate\Support\Facades\Input但更短的\Input形式。这就是为什么我展示了以上2个版本 - 较短的版本使用别名,较长的版本使用完整的类路径。我相信Laravel 4和Laravel 5中的机制相同。

答案 1 :(得分:1)

问题不在Laravel中,而是在PHP中。当你为一个类命名时,它假定该类中的所有内容都在同一个命名空间中,所以你必须告诉它,对于一个特定的类,你需要它来使用不同的命名空间。

您可以通过引用根命名空间来使用它们,如下所示:

class HomeController extends Controller
{
    public function index()
    {
        \Input::get('query');
    }
}