0
0

Laravel 学習(サービスプロバイダ)

Posted at

用語

サービスプロバイダ

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,
];

ビューコンポーザの使用

image.png

/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');

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0