source

Larabel 5의 모든 뷰에 데이터를 전달하는 방법

gigabyte 2022. 9. 4. 22:02
반응형

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::sharemiddleware

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_i1000회 처리됩니다.
  • composeGlobalComposerclass 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 입니다만, 자세한 내용은 이쪽에서 확인하겠습니다.

  1. 응용 프로그램의 루트 디렉토리에서 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()
        {
            //
        }
    }
    
  2. 응용 프로그램의 루트에서 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'
 );
  1. 응용 프로그램을 새로 고치면 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을 합니다. 공유 방법BootApp\Providers\AppServiceProvider:

public function boot()
{
  view()->share('key', 'value');
}

★★★에 접속합니다.$key변수를 지정합니다.

Note수 점에 해 주십시오.Session,Auth,Route이치노이 옵션은 정적 데이터를 공유하려는 경우에만 적합합니다.현재 사용자, 루트 또는 이를 통해 수행할 수 없는 커스텀세션 변수에 따라 일부 데이터를 공유한다고 가정합니다.

2. 도우미 클래스의 사용:

내 합니다.app.phpconfig더입니니다다

 '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

반응형