Laravel 5.0 -调用基本控制器的使用


Laravel 5.0 - Calling the use in basecontroller?

这是我的Controller.php,所有其他控制器从扩展。我希望那样做

<?php
namespace App'Http'Controllers;
use App'User;
use App;
use URL;
use App'City;
use Illuminate'Foundation'Bus'DispatchesCommands;
use Illuminate'Routing'Controller as BaseController;
use Illuminate'Foundation'Validation'ValidatesRequests;
abstract class Controller extends BaseController {
    use DispatchesCommands, ValidatesRequests;
}

但是看起来它不起作用。我需要在每个使用它的控制器中调用use App'User,即使它扩展了基本控制器。

这行不通:

<?php
namespace App'Http'Controllers;
class HomeController extends Controller { .... }

但是这样做:

namespace App'Http'Controllers;
use App'User;
use App;
use URL;
use App'City;
class HomeController extends Controller { .... }

这正常吗?它必须是痛苦的:-)有一些类在每个控制器中使用,这只是有点奇怪,我需要每次调用它们。

注意:我是从4.2迁移过来的,希望使用名称空间谢谢!

我建议你从php手册中阅读这一页:http://php.net/manual/en/language.namespaces.importing.php

考虑以下代码:

<?php
namespace App;
use App'User;
class MyClass extends Controller
{
    public function __construct()
    {
        new User(); // we refer to the App'User
    }
}
//another file
<?php
namespace App'AnotherNamespace;
class MySecondClass extends Controller
{
    public function __construct()
    {
        new User(); // I refer to App'AnotherNamespace'User
    }
}

在上面的例子中,我使用User作为引用。然而,我期望一个不同的对象类型。

希望你现在能更好地理解它。考虑一个好的IDE!!那将是对你最好的解决方案。当你输入"User"时,按下"ctrl ->空格"并看到结果是非常有用的。只需要按键盘上的几个按钮就可以了:)

p。如果你是从4.2升级过来的,我建议你直接升级到5.1,因为5.0也不再受支持了。Laravel 5.1是LTS版本,所以有更长的支持!

不幸的是,这是不可能的,因为您不能"继承"use语句。下面的注释摘自PHP文档中的使用名称空间:别名/导入:

注意:

导入规则是基于每个文件的,这意味着包含的文件将不会继承父文件的导入规则。

所以你需要根据需要在每个文件中声明use语句。


导入是在编译时完成的,而不是运行时。这不是特定于PHP的东西,例如Java import语句和c# using语句不是"继承"的,因为它们没有被编译,它们只是被编译器用来在编译时解析名称空间。这些语句有助于避免在代码中使用完全限定的名称空间,否则通常会使代码过于冗长且可读性差。