Laravel, пространства имен и PSR-4

Я пытаюсь настроить PSR-4 в новом приложении Laravel 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,

Может ли кто-нибудь помочь с этим, пожалуйста?

0

Решение

Проблема в вашем случае заключается в том, что View не находится в Illuminate пространство имен, но в Illuminate\View namespace, поэтому правильного импорта не будет:

use Illuminate\View;

но

use Illuminate\View\View;

Вы можете посмотреть на http://laravel.com/api/4.2/ чтобы выяснить, какое пространство имен подходит для класса, который вы хотите использовать

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

Использование View :: make () использует преимущества фасадов Laravel. Чтобы правильно ссылаться на фасад, вместо прямой ссылки на класс, который разрешается из контейнера iOC, я бы использовал следующее:

use Illuminate\Support\Facades\View;

Это будет ссылаться на фасад View, который используется при вызове View :: make ()

1
По вопросам рекламы [email protected]