Laravel 5- 모든 템플릿에서 사용 가능한 전역 블레이드 뷰 변수
Laravel 5에서 모든 블레이드 템플릿에서 사용할 수있는 전역 변수를 어떻게 만들 수 있습니까?
옵션 1 :
다음 view::share()
과 같이 사용할 수 있습니다 .
<?php namespace App\Http\Controllers;
use View;
//You can create a BaseController:
class BaseController extends Controller {
public $variable1 = "I am Data";
public function __construct() {
$variable2 = "I am Data 2";
View::share ( 'variable1', $this->variable1 );
View::share ( 'variable2', $variable2 );
View::share ( 'variable3', 'I am Data 3' );
View::share ( 'variable4', ['name'=>'Franky','address'=>'Mars'] );
}
}
class HomeController extends BaseController {
//if you have a constructor in other controllers you need call constructor of parent controller (i.e. BaseController) like so:
public function __construct(){
parent::__construct();
}
public function Index(){
//All variable will be available in views
return view('home');
}
}
옵션 2 : 작곡가 사용 :
- 다음 위치에서 작곡가 파일 만들기
app\Composers\HomeComposer.php
주의 : app\Composers
존재하지 않는 경우 생성
<?php namespace App\Composers;
class HomeComposer
{
public function compose($view)
{
//Add your variables
$view->with('variable1', 'I am Data')
->with('variable2', 'I am Data 2');
}
}
그런 다음이 작업을 수행하여 임의의 뷰에 작곡가를 첨부 할 수 있습니다.
<?php namespace App\Http\Controllers;
use View;
class HomeController extends Controller{
public function __construct(){
View::composers([
'App\Composers\HomeComposer' => ['home'] //attaches HomeComposer to home.blade.php
]);
}
public function Index(){
return view('home');
}
}
구성 파일 (config / app.php)에 새 서비스 공급자를 추가합니다.
새 서비스 공급자의 부팅 방법에서 다음을 사용합니다.
View::share( 'something_cool', 'this is a cool shared variable' );
이제 모든 뷰에서 $ something_cool을 사용할 준비가되었습니다.
도움이 되셨기를 바랍니다.
같은 문제의 해결을 찾고 Laravel 문서에서 해결책을 찾았습니다. 그냥 사용 View::share
에서이 AppServiceProvider
같은 :
View::share('key', 'value');
자세한 내용은 여기 .
뷰 컴포저 로이 작업을 수행 할 수 있습니다 . View Composers는 템플릿이로드 될 때 실행됩니다. 해당보기에 대한 추가 기능이있는 클로저를 사용할 수 있습니다. 보기 작성기를 사용하면 와일드 카드를 사용할 수 있습니다. 모든 뷰에 대한 뷰 작성기를 만들려면 *
.
View::composer('*', function($view)
{
$view->with('variable','Test value');
});
문서에서 볼 수 있습니다. 클로저 없이이 작업을 수행 할 수도 있습니다.
View::composer('*', 'App\Http\ViewComposers\ProfileComposer');
프로필 작성기 클래스에는 작성 방법이 있어야합니다.
뷰 작성기는 뷰가 될 때 실행됩니다. 라 라벨에는 뷰 크리에이터도 있습니다. 뷰가 인스턴스화 될 때 실행됩니다.
BaseController
setupLayout 메서드와 함께 를 사용하도록 선택할 수도 있습니다 . 그런 다음로드 할 모든 뷰는 몇 가지 추가 데이터를 추가하는 setupLayout 메서드를 통해로드됩니다. 그러나 뷰 컴포저를 사용하면 코드가 실행된다는 것을 확신 할 수 있습니다. 그러나 BaseController 접근 방식을 사용하면 추가 데이터로드를 건너 뛸 수 있으므로 더 많은 유연성을 얻을 수 있습니다.
편집 : Nic Gutierrez가 언급했듯이 뷰 공유를 사용할 수도 있습니다.
또한 Route.php
파일 에서이 작업을 수행 할 수 있습니다 .
view()->share('variableName', $variable);
그리고 당신은 배열을 줄 View::share('key', 'value');
수 있습니다.View::share(['key'=>'value','key'=>'value'])
차라리 view()
파사드 도우미 와 함께 미들웨어를 사용하고 싶습니다 . (라 라벨 5.x)
미들웨어는 관리하기 쉽고 컨트롤러 클래스 트리를 엉망으로 만들지 않습니다.
단계
미들웨어 생성
/app/Http/Middleware/TimezoneReset.php
미들웨어를 만들려면 다음을 실행할 수 있습니다. php artisan make:middleware GlobalTimeConfig
share()
공유해야하는 데이터
<?php
namespace App\Http\Middleware;
use Closure;
class GlobalTimeConfig
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$time_settings = [
'company_timezone' => 'UTC',
'company_date_format' => 'Y-m-d H:i:s',
'display_time' => true,
];
view()->share('time_settings', $time_settings);
return $next($request);
}
}
새로 생성 된 미들웨어 등록
아래 예제에 따라 미들웨어 경로 그룹에 미들웨어를 추가하십시오.
/app/Http/Kernel.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\GlobalTimeConfig::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
템플릿에서 데이터에 액세스
View :: share () 메서드 호출에서 주어진 키를 사용하여 템플릿의 데이터에 액세스합니다.
예 :
Company timezone: {{ $time_settings['company_timezone'] }}
편집 : Nic Gutierrez의 서비스 공급자 답변이 더 나은 (또는 최상의) 솔루션 일 수 있습니다.
Controller.php
파일에 추가 할 수 있습니다 .
use App\Category;
그리고:
class Controller extends BaseController {
public function __construct() {
$categories = Category::All();
\View::share('categories', $categories);
}
}
세션으로 플래시 할 수 있고 .env 파일 (정적 변수)에서 정의 할 수 있습니다.
'ProgramingTip' 카테고리의 다른 글
Ruby on Rails 3 :“수퍼 클래스 불일치 ...” (0) | 2020.12.29 |
---|---|
Mongoose에서 하위 문서를 만든 후 채우는 방법은 무엇입니까? (0) | 2020.12.29 |
전체 DOM에서 노드를 감지하는 MutationObserver의 성능 (0) | 2020.12.29 |
Python : smtplib 모듈을 사용하여 이메일을 보낼 때 "제목"이 표시되지 않음 (0) | 2020.12.28 |
"이름이"rabbit "인 노드가 이미 실행 중"이지만 " 'rabbit'노드에 수 없습니다." (0) | 2020.12.28 |