【问题标题】:Laravel, namespaces and PSR-4Laravel、命名空间和 PSR-4
【发布时间】:2014-11-12 10:54:29
【问题描述】:

我正在尝试在新的 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

有人可以帮忙吗?

【问题讨论】:

    标签: php laravel namespaces psr-4


    【解决方案1】:

    您的问题是 View 不在 Illuminate 命名空间中,而是在 Illuminate\View 命名空间中,所以正确的导入不会:

    use Illuminate\View; 
    

    但是

    use Illuminate\View\View;
    

    您可以查看http://laravel.com/api/4.2/ 以找出哪个命名空间适合您要使用的类

    【讨论】:

    • 嘘**今天早上我需要再喝点咖啡...谢谢!
    【解决方案2】:

    假设 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'));
        }
    }
    

    【讨论】:

      【解决方案3】:

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

      use Illuminate\Support\Facades\View;
      

      这将引用调用 View::make() 时使用的 View 外观

      【讨论】:

        猜你喜欢
        • 2015-08-23
        • 1970-01-01
        • 2017-01-18
        • 1970-01-01
        • 2023-04-02
        • 2015-12-01
        • 2015-09-22
        • 2014-08-03
        • 2015-12-03
        相关资源
        最近更新 更多