前提・実現したいこと
今月laravelの学習を始めたばかりの初心者です。
本を使って学習しています。
サービスプロバイダを作成して、bootメソッドの中にView::composer()を作成し、テンプレートへ変数を渡す処理をしていましたが、渡されずに未定義になってしまいます。
コントローラから渡した変数は受け取られて、ブラウザに反映されています。
知人とgithubでコードを共有しており、知人の環境ではエラーは出ず、変数が渡されています。
実現したいこと
下の画像の、= view_messageが、composer message!と表示されるようにしたいです。
この画像は、{{$view_message}}を間違えて{{'view_message'}}と打ってしまった為に、エラーが発覚していなかった時のものです。
発生している問題・エラーメッセージ
Facade\Ignition\Exceptions\ViewException Undefined variable: view_message (View: C:\Users\chi_s\Desktop\laravelapp\resources\views\hello\index.blade.php)
該当のソースコード
index.blade.php.php (子レイアウト)
@extends('layouts.helloapp') @section('title','Index') @section('menubar') @parent インデックスページ @endsection @section('content') <p>ここが本文のコンテンツです。</p> <p>Controller value<br>'message' = {{$message}}</p> <p>ViewComposer value<br>'view_message' = {{$view_message}}</p> @endsection @section('footer') copyright 2020 tuyano. @endsection
この、$view_messageが未定義と言われています。$messageはコントローラから渡されており、受け取られています。
HelloServiceProvider.php (サービスプロバイダ)
<?php namespace App\Providers; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class HelloServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { // } /** * Bootstrap services. * * @return void */ public function boot(){ View::composer('hello.index',function($view){ $view->with('view_message','composer message!'); }); } }
HelloController.php (コントローラ)
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; class HelloController extends Controller { public function index() { return view('hello.index',['message'=>'Hello!']); } public function post(Request $request) { return view('hello.index', ['msg'=>$request->msg]); } }
Helloapp.blade.php (親レイアウト)
<html> <head> <title>@yield('title')</title> <style> body {font-size: 16pt; color:#999; margin: 5px; } h1 { font-size: 50pt; text-align: right; color:#f6f6f6; margin: -20px 0px -30px 0px; letter-spacing: -4pt; } ul { font-size:12pt;} hr { margin: 25px 100px; border-top: 1px dashed #ddd;} .menuetitle { font-size: 14pt; font-weight: bold; margin: 0px;} .content { margin:10px;} .footer { text-align: right; font-size: 10pt; margin: 10px; border-bottom: solid 1px #ccc; color: #ccc;} </style> </head> <body> <h1>@yield('title')</h1> @section('menubar') <h2 class="menuetitle">※メニュー</h2> <ul> <li>@show</li> </ul> <hr size="1"> <div class = "content"> @yield('content') </div> <div class = "footer"> @yield('footer') </div> </body> </html>
試したこと
➀laravelの再起動、PC自体の再起動。
変わらず。
➁configフォルダのapp.phpを確認。
classの後に,が無かったので入れてみたけど変わらず。
![]
➂logを出してみる
indexのログしかでない
補足情報(FW/ツールのバージョンなど)
自分の環境
windows10
php7.4.3(xampp)
Laravel Framework 7.3.0
Visual Studio Code
知人の環境
「macでdockerつかってるので実質linux (laradock)」だそうです。
質問者は初心者すぎて意味が分からずそのまま書きました。
コードは、laravelのプロジェクトのlaravelappをgitのリポジトリに丸ごと入れて共有しています。
pullしかしてないそうです。
フレームワークの仕組みがまださっぱりで、お手上げ状態です><
どうぞ宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。