2014-09-24 60 views
1

这可能是一个简单的问题,但我想知道如何自动加载有用的类,而无需在每个文件中声明使用语句。Laravel中的命名空间和自动加载

<?php namespace App\Http\Controllers; 

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

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

如果我删除使用照亮的\ Support \外立面\输入; line我将得到一个类未找到的错误,因为我使用了Input类。

有没有办法像Laravel 4那样自动加载像Input,Response,View这样的有用的类。app.php中的别名有什么意义?

回答

1

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

您可以参照根命名空间,像这样使用它们:

use Illuminate\Support\Facades\Input; 

use Input; 

那么你:

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

谢谢。我忘了使用黑色的根目录。现在它对app.config中的别名有意义 – Yada 2014-09-24 19:24:35

2

您可以同时使用导入输入类可以使用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中都有相同的机制。

相关问题