用語
サービスプロバイダ
Laravelプロジェクト直下で下記コマンドを実行する。
php artisan make:provider HelloServiceProvider
下記ファイルが作成される。
Laravelプロジェクト\app\Providers\HelloServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelloServiceProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
//
}
/**
* Bootstrap services.
*/
public function boot(): void
{
//
}
}
-
register
サービスの登録で使う -
boot
アプリ起動時の処理
ビューコンポーザの利用ができるようになる
下記ファイルに上記プロバイダが追加されているのを確認。
※config/app.phpはいじらない。
Laravelプロジェクト\bootstrap\providers.php
<?php
return [
App\Providers\AppServiceProvider::class,
App\Providers\HelloServiceProvider::class,
];
ビューコンポーザの使用
/helloにアクセスすると上図のようになる。
providers.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
use Symfony\Component\CssSelector\Node\FunctionNode;
class HelloServiceProvider extends ServiceProvider
{
/**
* Register services.
*/
public function register(): void
{
//
}
/**
* Bootstrap services.
*/
public function boot(): void
{
View::composer(
'hello.index', 'App\Http\Composers\HelloComposer'
);
}
}
Laravelプロジェクト\app\Http\Composers\HelloComposer.php
<?php
namespace App\Http\Composers;
use Illuminate\View\View;
class HelloComposer
{
public function compose(View $view) {
$view->with('view_msg', 'ComposerのMSG');
}
}
Laravelプロジェクト\resources\views\hello\index.blade.php
@extends('layouts.helloapp')
@section('title', 'タイトル')
@section('menubar')
@parent
showの値
<li>子</li>
@endsection
@section('content')
<p>コンテンツ</p>
<p>何か記述する</p>
<p>msg: {{$msg}}</p>
<p>view_msg: {{$view_msg}}</p>
@endsection
@section('footer')
<h2>フッター</h2>
<p>フッターを記載します。</p>
@endsection
Laravelプロジェクト\resources\views\layouts\helloapp.blade.php
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
<h1>@yield('title')</h1>
<hr size="1">
@section('menubar')
<h2 class="menutitle">メニュー</h2>
<ul>
<li>親1</li>
<li>@show</li>
<li>親2</li>
</ul>
<hr size="1">
<div class="content">
@yield('content')
</div>
<hr size="1">
<div class="footer">
@yield('footer')
</div>
</body>
</html>
Lravelプロジェクト\routes\web.php
Route::get('/hello','App\Http\Controllers\HelloController@index');
参考