Я пытаюсь настроить 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
,
Может ли кто-нибудь помочь с этим, пожалуйста?
Проблема в вашем случае заключается в том, что View
не находится в Illuminate
пространство имен, но в Illuminate\View
namespace, поэтому правильного импорта не будет:
use Illuminate\View;
но
use Illuminate\View\View;
Вы можете посмотреть на http://laravel.com/api/4.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'));
}
}
Использование View :: make () использует преимущества фасадов Laravel. Чтобы правильно ссылаться на фасад, вместо прямой ссылки на класс, который разрешается из контейнера iOC, я бы использовал следующее:
use Illuminate\Support\Facades\View;
Это будет ссылаться на фасад View, который используется при вызове View :: make ()