2017-12-21 21 views
-1

Laravel 5.5 프로젝트의 모든 렌더링 된보기에 내용을 추가 할 수있는 방법이 있습니까? 예를 들어 실제 프로젝트 코드를 수정하지 않고도 모든 렌더링 된 뷰에 JavaScript 코드를 추가하는 하나의 Composer 패키지가 필요합니다.Laravel은 렌더링 된 모든보기에 내용을 추가합니다.

이제는 패키지로 뷰를 만들고이를 레이아웃 헤더에 포함시켜 구현했지만, 수동 포함없이이 방법을 사용할 수 있다면 더 좋을 것입니다.

+0

을 [debugbar] (https://github.com/barryvdh/laravel-debugbar)는 현재 때문에이 동작을 구현 네, 가능합니다. – milo526

답변

1

미들웨어를 사용할 수 있습니다. 테스트를 실행할 때이 코드는 HTML에서 </head>하기 전에 코드의 추가 조각을 추가하면, 예를 들어 원하는 코드의 조각을 추가 응답을 수정할 수 있습니다

public function handle($request, Closure $next, $guard = null) 
{ 
    /** @var Response $response */ 
    $response = $next($request); 
    if ($response instanceof Response && app()->runningUnitTests() && 
     str_contains($response->headers->get('Content-Type'), 'text/html')) { 
     $content = $response->getContent(); 
     if (($head = mb_strpos($content, '</head>')) !== false) { 
      $response->setContent(mb_substr($content, 0, $head) . 
       '<style>' . $this->config->get('laravel_test_css.style') . '</style>' . 
       mb_substr($content, $head)); 
     } 
    } 
    return $response; 
} 

(이 내 미들웨어의 코드 조각 - 전체 파일 - https://github.com/mnabialek/laravel-test-css/blob/master/src/Middleware/LaravelTestCss.php) 당신은 전 세계적으로이 미들웨어를 적용 할 경우

이 같은 일을 할 수 있습니다 : 내가 아는

app('Illuminate\Contracts\Http\Kernel')->pushMiddleware(CustomMiddleware::class); 
+0

이 경우 경로에서 사용중인 미들웨어를 구성해야합니까? 나는 오직 작곡가 요구가 필요하므로 완전히 자동화 된 솔루션을 찾고 있습니다. – lingo

+0

'web' 그룹 미들웨어를 사용한다고 가정하면'app/Http/Kernel.php'를'web' 그룹에 추가하는 것으로 충분합니다. –

+0

네, 맞습니다. 하지만 완전히 자동화 된 것은 아닙니다. 레이아웃 템플릿 블레이드에 파일을 포함하는 것과 거의 동일합니다. – lingo

0

경우에 따라 응용 프로그램에서 렌더링 한 모든보기와 데이터를 공유해야 할 수도 있습니다. 뷰 파사드의 공유 방법을 사용하면됩니다. 일반적으로 서비스 공급자의 부팅 방법 내에서 공유 할 호출을해야합니다. 당신은 그들에게

https://laravel.com/docs/5.5/views#sharing-data-with-all-views

을 수용하기 위해 별도의 서비스 제공을 AppServiceProvider에 추가하거나 생성하는 무료 또는 당신은보기 작곡가 사용할 수 있습니다

작곡가 방법은 또한 *을 허용을 문자를 와일드 카드로 사용하여 모든보기에 작곡가를 추가 할 수 있습니다.

View::composer('*', function ($view) { 
    // 
}); 

+0

단순히 변수로만 플레이하지 않기 때문에 그렇게 간단하지 않습니다. 모든 렌더링 된보기에 내용을 포함하고 싶습니다. – lingo

+0

@ HTML/JS/CSS 인 경우 기본 레이아웃 블레이드 파일에 추가 할 수 있습니다. BTW, 내가 본 모든 고품질 패키지는 작곡가를 사용합니다. 그래서, 예를 들어 동적 JS를 렌더링 할 수 있습니다. –

+0

레이아웃에 수동으로 포함해야하는 경우 자동화 된 구현에 대해 이야기하는 것이 아닙니다. 작곡가는 다른 것들을위한 것입니다. 나는 middlewares를 사용하여이 작업을 수행했습니다. 다른 답변도 읽어주십시오. – lingo