Laravel,命名空间和PSR-4

时间:2014-09-18 07:40:45

标签: php laravel namespaces psr-4

我试图在新的Laravel 4应用程序中设置PSR-4,但是在构建控制器时我遇到了一些麻烦。

这就是我现在所拥有的:

namespace MyApp\Controllers\Domain;

class DomainController extends \BaseController {

    public $layout = 'layouts.default';

    public function home() {
        $this->layout->content = \View::make('domain.home');
    }
}

我不太喜欢使用\View\Config\Whatever来使用Laravel的课程。所以我想知道是否可以use Illuminate\View;使用View::make而无需放\

不幸的是,在执行此操作时,我收到以下错误:Class 'Illuminate\View' not found

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

假设BaseController.php的命名空间为MyApp \ Controllers \ Domain

namespace MyApp\Controllers\Domain;

use View;

class DomainController extends BaseController {

    public $layout = 'layouts.default';

    public function home() {
        $this->layout->content = View::make('domain.home');
    }
}

如果BaseController.php有其他命名空间,即MyApp \ Controllers

namespace MyApp\Controllers\Domain;

use MyApp\Controllers\BaseController;
use View;

class DomainController extends BaseController {

    public $layout = 'layouts.default';

    public function home() {
        $this->layout->content = View::make('domain.home');
    }
}

例如,如果您的控制器需要使用Laravel中的另一个基类,请说Config

namespace MyApp\Controllers\Domain;

use MyApp\Controllers\BaseController;
use View;
use Config;

class DomainController extends BaseController {

    public $layout = 'layouts.default';

    public function home() {
        $this->layout->content = View::make('domain.home')->withName(Config::get('site.name'));
    }
}

答案 1 :(得分:1)

您的问题是View不位于Illuminate命名空间中,而是位于Illuminate\View命名空间中,因此正确导入不会:

use Illuminate\View; 

use Illuminate\View\View;

您可以查看http://laravel.com/api/4.2/以找出您想要使用的类正确的命名空间

答案 2 :(得分:1)

View :: make()的使用利用了Laravel外墙。要正确引用外观,而不是直接引用从iOC容器中解析出来的类,我将使用以下内容:

use Illuminate\Support\Facades\View;

这将引用调用View :: make()

时使用的View外观