이 목표는 다른 방법을 통해 달성 할 수 있습니다.
1. BaseController 사용
내가 설정하는 방식 BaseController
은 라 라벨 자체를 확장 하는 클래스를 만들고 Controller
거기에 다양한 글로벌 사물을 설정합니다. 다른 모든 컨트롤러 BaseController
는 Laravel의 컨트롤러 가 아닌 확장됩니다 .
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
2. 필터 사용
전체 애플리케이션의 모든 요청에 대한 뷰에 대해 무언가를 설정하려는 사실을 알고 있다면 요청 전에 실행되는 필터를 통해 수행 할 수도 있습니다. 이것이 제가 Laravel에서 User 객체를 처리하는 방법입니다.
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
또는
자신 만의 필터를 정의 할 수 있습니다.
Route::filter('user-filter', function() {
View::share('user', User::all());
});
간단한 필터 호출을 통해 호출합니다.
버전 5. *에 따라 업데이트
3. 미들웨어 사용
View::share
와 함께 사용middleware
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
4. View Composer 사용
View Composer는 특정 데이터를 다른 방식으로보기에 바인딩하는데도 도움이됩니다. 변수를 특정보기 또는 모든보기에 직접 바인딩 할 수 있습니다. 예를 들어 요구 사항에 따라보기 작성기 파일을 저장할 고유 한 디렉터리를 만들 수 있습니다. 이러한 View Composer 파일은 서비스를 통해보기와 상호 작용을 제공합니다.
View composer 메서드는 다른 방식으로 사용할 수 있습니다. 첫 번째 예제는 다음과 유사합니다.
App\Http\ViewComposers
디렉토리를 만들 수 있습니다 .
서비스 제공자
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
그런 다음 "providers"섹션에서 config / app.php에이 공급자를 추가합니다.
TestViewComposer
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class TestViewComposer {
public function compose(View $view) {
$view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
}
}
ViewName.blade.php
Here you are... {{$ViewComposerTestVariable}}
이 방법은 특정보기에만 도움이 될 수 있습니다. 그러나 모든 뷰에 ViewComposer를 트리거하려면이 단일 변경 사항을 ServiceProvider에 적용해야합니다.
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
참고
Laravel 문서
추가 설명을 위해 Laracast 에피소드
내 편에서 여전히 불분명 한 것이 있으면 알려주십시오.