🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

592閲覧

Laravel コントローラから画面へ、データの受け渡しができない

akashi-seijuro

総合スコア24

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/12/06 10:45

コントローラから画面へのデータの受け渡しができません。

下記コントローラのregistUserメソッドで、画面遷移を行う際に、$nameという変数にセットしたデータを画面に渡すつもりでコードを書いていますが、画面側に渡したデータが表示されません。

試したこと
$nameに値が入っているかどうかを確認したところ、この変数には、渡したいデータがセットされていました。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\FormValidateRequest; use Validator; class RegistController extends Controller { // public function regist(){ return view('regist'); } public function registUser(FormValidateRequest $request){ /* データベースへの登録処理を行う */ $name = $request->only('name'); return view('home', compact('name')); } }

画面側のコード(コンポーネント)

<header> <div class="header-wrapper"> <div> <p>Laravel</p> </div> <div class="nav"> <ul> @if(isset($name)) <li><a href="{{ route('logout')}}">Logout</a></li> <li><a href="#">{{$name}}</a></li> @else <li><a href="{{route('login')}}">Login</a></li> <li><a href="{{route('regist')}}">Regist</a></li> @endif </ul> </div> </div> </header>

テンプレート

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script src="https://kit.fontawesome.com/35b19442e0.js" crossorigin="anonymous"></script> <title>@yield('title')</title> @yield('style') </head> <body> @component('components.header') @endcomponent @yield('content') @component('components.footer') @endcomponent </body> </html>

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

onlyだから配列になりそうですね

その受け渡しではviewでは$name['name']になる感じがします


laravel6で確認したソース

web.php(router)

php

1Route::get('/home', function() { 2 $name = ['name' => 'hoge']; 3 return view('home', compact('name')); 4});

app.blade.php(view)

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <script src="https://kit.fontawesome.com/35b19442e0.js" crossorigin="anonymous"></script> 8 <title>@yield('title')</title> 9 @yield('style') 10</head> 11<body> 12 @component('components.header', $name) 13 @endcomponent 14 15 @yield('content') 16 17 @component('components.footer', $name) 18 @endcomponent 19</body> 20</html>

header.blade.php(view)

php

1header:{{$name}} 2<br />

footer.blade.php(view)

php

1footer:{{$name}} 2<br />

home.blade.php(view)

php

1@extends('layouts.app') 2 3@section('content') 4{{$name['name']}} 5<br /> 6@endsection

投稿2019/12/06 10:50

編集2019/12/09 03:29
rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akashi-seijuro

2019/12/06 10:58

回答ありがとうございます。 {{$name['name']}}に変更してみましたが、ヘッダー部分の表示が切り替わりませんでした。
rururu3

2019/12/06 11:07

あと$nameに値が入ってたいのはどうやって確認したのか&どういう表示になったのかを教えていただければ幸いです
akashi-seijuro

2019/12/06 11:13

回答ありがとうございます。 変数の値の確認はvar_dump()を使用して、確認しました。 遷移後の画面左上に、変数に入れた値が表示されていました。 よろしくお願いいたします。
rururu3

2019/12/06 11:17

var_dumpで出力された内容が重要なので、コピペで貼り付けていただければ
akashi-seijuro

2019/12/06 11:23 編集

array(1) { ["name"]=> string(6) "高橋" } このように表示されました。 よろしくお願いいたします!
rururu3

2019/12/06 11:39 編集

ああ、@yieldでは変数渡らないんだった気がする https://qiita.com/makies/items/2ab24188e7f8482bfddc @include('content', $name)使ってください(このとき、content内の変数アクセスは$name['name']ではなく$nameで問題ないです)
akashi-seijuro

2019/12/06 11:35

ありがとうございます! やってみます!
akashi-seijuro

2019/12/06 11:59

rururu3さん ていねいに説明していただきありがとうございました。 header.blade.php内の変数を$nameにして、template.blade.phpでヘッダーコンポネントを読み込んでいる部分を、@include('heade.blade.php', $name)に変更したところうまくいきました! 数日間解決できていないことが、おかげさまで解決できました。 ありがとうございました!
rururu3

2019/12/06 12:16

解決してよかったです。ちょっと最初の回答からずれてしまったので回答編集しておきます
rururu3

2019/12/06 12:24 編集

あ、もしかして、画面側のコード(コンポーネント)の読み込みって @component('components.header') @endcomponent ここですか?でしたら@component('components.header', $name) でも行けると思います (ずっと@yield('content')ここと思ってたので)
akashi-seijuro

2019/12/06 12:29

なるほど、それでもいけるのですね。 そちらのほうほうも試してみます。 ほかの方から、質問内容が分かりにくいことを指摘されたことがあるので、考えていることが伝わるように書いているつもりですが、至らない点があり、大変もうしわけありません。
akashi-seijuro

2019/12/07 05:48

rururu3さん component('', $name);は試してみましたが、エラーが表示されるようになってしまいました。自分でエラーを解決できるようにもうすこし自分で考えてみて、どうしても自力で解決できそうになければ、改めて質問させてください。 お忙しいなか、回答していただき、助かりました。
mikkame

2019/12/07 07:37

私はyieldを普段使っていますが親(extends先)にある変数は継承されています。 includeに書き換えてしまうと、共通の親をもつ、とできなくなってしまうので他の原因かと思われます
rururu3

2019/12/09 03:15

ごめんなさい、yieldに関して勘違いしてました。勘違いした関係で回答もおかしいので書き直します
akashi-seijuro

2019/12/09 05:59

mikkameさん rururu3さん ご回答ありがとうございます。 いろんな方の意見や情報をいただけて、大変助かっております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問