Larabel 5의 모든 뷰에 데이터를 전달하는 방법
Larabel 5 어플리케이션의 모든 뷰에서 기본 데이터에 액세스할 수 있도록 하고 싶습니다.
검색을 해봤지만 Larabel 4에 대한 결과만 찾았습니다.여기에서 '모든 보기를 사용하여 데이터 공유' 문서를 읽었지만 어떻게 해야 할지 이해할 수 없습니다.다음 코드를 어디에 배치해야 합니까?
View::share('data', [1, 2, 3]);
도와줘서 고맙습니다.
이 타겟은 다른 방법으로 달성할 수 있습니다.
1. Base Controller 사용
셋업하는 으로 업업 a a a a a를 .BaseController
자신의을 확장하는 Controller
다양한 글로벌한 것을 셋업 할 수 있습니다. 후 다른 모든 에서 됩니다.BaseController
'이 아니라 '★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
2. 필터 사용
어플리케이션 전체의 모든 요구에 대해 뷰에 대해 어떤 설정을 하고 싶은 경우는, 요구 전에 실행되는 필터를 통해서도 설정할 수 있습니다.이렇게 하면 Larabel의 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 메서드는 다른 방법으로 사용할 수 있습니다. 첫 번째 예는 비슷할 수 있습니다.
「 」를 할 수 .App\Http\ViewComposers
디렉토리로 이동합니다.
서비스 프로바이더
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
그런 다음 이 공급자를 "공급자" 섹션의 config/app.php에 추가합니다.
Test View Composer
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class TestViewComposer {
public function compose(View $view) {
$view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
}
}
표시명blade.displaces
Here you are... {{$ViewComposerTestVariable}}
이 방법은 특정 보기에만 도움이 될 수 있습니다.그러나 View Composer를 모든 뷰에 트리거하려면 이 단일 변경을 Service Provider에 적용해야 합니다.
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
언급
자세한 설명은 Laracast 에피소드
제 쪽에서 뭔가 불명확한 점이 있으면 알려주세요.
독자적인 서비스 프로바이더를 작성할 수도 있습니다(ViewServiceProvider
common) name is common)을할 수 .AppServiceProvider
.
선택한 프로바이더에서 부트 방법에 코드를 입력합니다.
public function boot() {
view()->share('data', [1, 2, 3]);
}
하면 ★★★★★★★★★★★★★★★★★★★★★.$data
모든 보기에서 액세스할 수 있는 변수입니다.
는, 「」를 합니다.view()->
로로 합니다.View::
잊지 꼭 .use View;
을 사용하다
이게 제일 쉬웠어요. " " " 를 만듭니다.'*'
와일드카드를 사용하여 모든 보기에 연결합니다.에서도 로 동작합니다.3월 3일 :-)
<?php
namespace App\Providers;
use Illuminate\Http\Request;
use Illuminate\Support\ServiceProvider;
class ViewServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
* @return void
*/
public function boot()
{
view()->composer('*', function ($view)
{
$user = request()->user();
$view->with('user', $user);
});
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
은 변수를 입니다.View::share('var', $value);
를사 using using using using를 "*"
:
다음 접근방식을 고려하십시오.
<?php
// from AppServiceProvider::boot()
$viewFactory = $this->app->make(Factory::class);
$viewFacrory->compose('*', GlobalComposer::class);
블레이드 뷰의 예:
@for($i = 0; $i<1000; $i++)
@include('some_partial_view_to_display_i', ['toDisplay' => $i])
@endfor
어떻게 되는 거죠?
GlobalComposer
를 사용하여 1000회 클래스가 인스턴스화됩니다.App::make
- '''
composing:some_partial_view_to_display_i
1000회 처리됩니다. compose
GlobalComposer
class 1000번이다.
는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」some_partial_view_to_display_i
에 의해 구성되는 변수와는 무관합니다.GlobalComposer
이치노
최선의 접근법?
「」를 사용합니다.View::share
그룹화된 미들웨어를 따라갑니다.
Route::group(['middleware' => 'WebMiddleware'], function(){
// Web routes
});
Route::group(['prefix' => 'api'], function (){
});
class WebMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
갱신하다
미들웨어 파이프라인을 통해 계산된 것을 사용하는 경우 적절한 이벤트를 듣거나 뷰 공유 미들웨어를 파이프라인의 맨 아래에 배치할 수 있습니다.
매뉴얼:
통상, 서비스 프로바이더의 부트 방식내의 공유 방식에 콜을 발신합니다.이러한 서비스 공급자는 AppServiceProvider에 추가하거나 별도의 서비스 공급자를 생성하여 보관할 수 있습니다.
의 의견에요. 웰웰 it it it it it it it it it it it it 넣어주세요.AppServiceProvider
트트: :
public function boot() {
View::share('youVarName', [1, 2, 3]);
}
다른 no 'global' 변수와의 혼동이나 오류를 피하기 위해 변수에 특정 이름을 사용할 것을 권장합니다.
설명서는 https://laravel.com/docs/5.4/views#view-composers 입니다만, 자세한 내용은 이쪽에서 확인하겠습니다.
응용 프로그램의 루트 디렉토리에서 app\Providers 디렉토리를 찾아 ComposerServiceProvider 파일을 만듭니다.php를 복사하여 아래 텍스트를 복사하여 저장합니다.
<?php namespace App\Providers; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class ComposerServiceProvider extends ServiceProvider { /** * Register bindings in the container. * * @return void */ public function boot() { // Using class based composers... View::composer( 'profile', 'App\Http\ViewComposers\ProfileComposer' ); // Using Closure based composers... View::composer('dashboard', function ($view) { // }); } /** * Register the service provider. * * @return void */ public function register() { // } }
응용 프로그램의 루트에서 Config/app.php를 열고 파일 내의 Providers 섹션을 찾아 이 'App\Providers\ComposerServiceProvider'를 어레이에 복사하여 붙여넣습니다.
이를 통해 Composer Service Provider를 만들었습니다.http://yourdomain/something/profile과 같은 뷰 프로파일을 사용하여 응용 프로그램을 실행하면 서비스 프로바이더 Composer Service Provider가 호출되고 부팅 메서드 또는 함수 내의 코드 때문에 App\Http\View Composers\Profile Composer 클래스가 메서드를 호출합니다.
// Using class based composers...
View::composer(
'profile', 'App\Http\ViewComposers\ProfileComposer'
);
- 응용 프로그램을 새로 고치면 App\Http\ViewComposers\ProfileComposer 클래스가 아직 존재하지 않기 때문에 오류가 발생합니다.이제 작성하겠습니다.
디렉토리 경로 앱/Http로 이동
ViewComposers라는 디렉토리를 만듭니다.
Profile Composer.php 파일을 만듭니다.
class ProfileComposer { /** * The user repository implementation. * * @var UserRepository */ protected $users; /** * Create a new profile composer. * * @param UserRepository $users * @return void */ public function __construct(UserRepository $users) { // Dependencies automatically resolved by service container... $this->users = $users; } /** * Bind data to the view. * * @param View $view * @return void */ public function compose(View $view) { $view->with('count', $this->users->count()); } }
이제 뷰 또는 이 경우 Profile.blade로 이동합니다.php 및 추가
{{ $count }}
프로파일 페이지에 사용자 수가 표시됩니다.
모든 페이지 변경 건수를 표시하려면
// Using class based composers...
View::composer(
'profile', 'App\Http\ViewComposers\ProfileComposer'
);
로.
// Using class based composers...
View::composer(
'*', 'App\Http\ViewComposers\ProfileComposer'
);
두 가지 옵션이 있습니다.
1을 합니다. 공유 방법Boot
App\Providers\AppServiceProvider
:
public function boot()
{
view()->share('key', 'value');
}
★★★에 접속합니다.$key
변수를 지정합니다.
Note
수 점에 해 주십시오.Session
,Auth
,Route
이치노이 옵션은 정적 데이터를 공유하려는 경우에만 적합합니다.현재 사용자, 루트 또는 이를 통해 수행할 수 없는 커스텀세션 변수에 따라 일부 데이터를 공유한다고 가정합니다.
2. 도우미 클래스의 사용:
내 합니다.app.php
config
더입니니다다
'aliases' => [
...,
'Helper' => App\HelperClass\Helper::class,
],
작성하다Helper.php
[폴더에 있는 [HelperClass] [HelperClass는 HelperClass]의 [HelperClass]의 [HelperClass]의 [HelperClass]폴더에 있습니다.
namespace App\HelperClass;
class Helper
{
public static function Sample()
{
//Your Code Here
}
}
할 수 .Helper::Sample()
.
는 그렇게 되지 것이다.restricted
사사를 사용하기 위해 Auth
,Route
,Session
, 또는 다른 클래스입니다.
1) 입력(App\Providers\AppServiceProvider.php)
// in boot function
view()->composer('*', function ($view) {
$data = User::messages();
$view->with('var_messages',$data);
});
2) 사용자 모델
public static function messages(){ // this is just example
$my_id = auth()->user()->id;
$data= Message::whereTo($my_id)->whereIs_read('0')->get();
return $data; // return is required
}
3) 고객님의 견해
{{ $var_messages }}
가장 좋은 방법은 이 모든 것들을View Composers
누군가가 와서 View Composers 방식으로 어떻게 할 수 있는지 알고 싶다면 제 답변을 읽어보세요=> 모든 뷰에서 변수를 공유하는 방법
설명서는 https://laravel.com/docs/5.4/views#view-composers에 있습니다만, 1에 대해 자세히 설명하겠습니다.루트 디렉토리에서 Provider 디렉토리를 찾아 ComposerServiceProvider용 디렉토리를 만듭니다.콘텐츠 포함 php
구성 폴더 내에 php 파일 이름을 만들 수 있습니다. 예를 들어, "variable.php"는 다음과 같습니다.
<?php
return [
'versionNumber' => '122231',
];
이제 모든 뷰 내에서 다음과 같이 사용할 수 있습니다.
config('variable.versionNumber')
Larabel 5.6 방법: https://laravel.com/docs/5.6/views#passing-data-to-views
예: 모델 컬렉션을 모든 뷰(AppServiceProvider.php)에 공유하는 경우:
use Illuminate\Support\Facades\View;
use App\Product;
public function boot()
{
$products = Product::all();
View::share('products', $products);
}
예를 들어 다음과 같이 데이터베이스 내의 모든 테이블 목록을 Controller의 모든 뷰로 되돌릴 수 있습니다.
public function __construct()
{
$tables = DB::select('SHOW TABLES'); // returns an array of stdObjects
view()->share('tables', $tables);
}
Larabel 5 이상 버전에서는 AppServiceProvider에서 부팅 기능을 편집할 수 있습니다.모든 뷰에서 변수에 액세스하려면 php
public function boot()
{
\View::composer('*', function($view){
$view->with('key', 'value');
});
}
"Key"는 나중에 임의의 .blade에서 사용할 수 있도록 설정하는 변수의 이름을 나타냅니다.php 파일과 "value"는 변수에 의해 표시되는 값을 나타냅니다.예:
//모든 블레이드가 액세스하도록 사용자 역할을 설정합니다.php 파일
public function boot(){
//
View::composer('*', function($view){
view->with('role', Auth::user()->infouser->role);
});
}
라라벨 8을 쓰시는 분들은 이렇게 하시면 됩니다.
class Controller extends BaseController{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function __construct(){
$categories = Category::where('show_menu', '=', 1)->where('status', '=', 'approved')->get();
view()->share('categories', $categories);
}}
언급URL : https://stackoverflow.com/questions/28608527/how-to-pass-data-to-all-views-in-laravel-5
'source' 카테고리의 다른 글
dup2 및 pipe()를 사용하여 명령어 "ls -l | grep ^d | wc " 를 실행합니다. (0) | 2022.09.04 |
---|---|
네이티브 스크립트는 vuex 요청이 완료될 때까지 요청을 기다립니다. (0) | 2022.09.04 |
파일 또는 파일 유사 개체에 대한 힌트를 입력하십시오. (0) | 2022.09.04 |
vue.js 응용 프로그램의 정적 자산에 대한 경로 (0) | 2022.09.04 |
Vue 컴포넌트를 외부 프로젝트에 공개하다 (0) | 2022.09.04 |