1

这可能是一个简单的问题,但我想知道如何在不在每个文件上声明 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; 行我会得到一个类未找到错误,因为我正在使用输入类。

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

4

2 回答 2

2

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

use Illuminate\Support\Facades\Input;

或者

use Input;

然后你可以使用Input::get('query');代码。这就是 PHP 命名空间的工作方式 - 您还可以查看如何使用来自其他命名空间的对象以及如何在 PHP 中导入命名空间以了解更多详细信息。

如果你不使用use声明来导入类,你可以使用\Input::get('query');or \Illuminate\Support\Facades\Input::get('query');

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

于 2014-09-24T19:36:36.930 回答
1

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

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

class HomeController extends Controller
{
    public function index()
    {
        \Input::get('query');
    }
}
于 2014-09-24T19:19:54.160 回答