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

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

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

2回答

814閲覧

PostsControllerから複数変数をbladeに渡したいがエラーとなる。(Undefined variable: word)

Ms.yy

総合スコア83

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2019/12/27 12:25

編集2019/12/28 02:01

前提・実現したいこと

PostsControllerから$wordと$postsの複数変数をbladeの定められた箇所に渡したい。

発生している問題・エラーメッセージ

Undefined variable: word (View: /home/vagrant/laravel_lessons_copy/myblog/resources/views/posts/search2.blade.php)

PostsController

public function search2(Request $request){ $posts = Post::latest()->get(); $word = $request->word; return view('posts.search2')->with([ 'posts', $posts, 'word',$word ]); }

search2.blade.php

@extends('layouts.default') @section('title', 'Blog Posts') <h1>◉◉◉◉◉◉◉search2のblade.php表示中◉◉◉◉◉◉◉</h1> @section('content') <p> 送られてきた変数は{{$word}}   </p> <!-- =============== --> @forelse ($posts as $post)    <tr> <th scope="row">1</th> <td> <a href="{{ action('PostsController@show', $post) }}">{{ $post->title }}</a> </td> <td> <a href="{{ action('PostsController@edit', $post) }}" class="edit">[Edit]</a> </td> <td> <a href="#" class="del" data-id="{{ $post->id }}">[x]</a> <form method="post" action="{{ url('/posts', $post->id) }}" id="form_{{ $post->id }}"> {{ csrf_field() }} {{ method_field('delete') }} </form> </td> </tr> @empty @endforelse <ul> </ul> @endsection

 

試したこと

PostsControllerでpostsだけbladeに渡すと正常に表示されます。

PostsController(postsだけ渡す)

public function search2(Request $request){ $posts = Post::latest()->get(); //$word = $request->word;  return view('posts.search2')->with('posts', $posts);

search2.blade.php(postsだけ表示)

@extends('layouts.default') @section('title', 'Blog Posts') <h1>◉◉◉◉◉◉◉search2のblade.php表示中◉◉◉◉◉◉◉</h1> @section('content') <p> 送られてきた変数は{{$posts}}  //ここだけ上記のbladeと比べて違います。 </p> <!-- =============== --> @forelse ($posts as $post) <tr> <th scope="row">1</th> <td> <a href="{{ action('PostsController@show', $post) }}">{{ $post->title }}</a> </td> <td> <a href="{{ action('PostsController@edit', $post) }}" class="edit">[Edit]</a> </td> <td> <a href="#" class="del" data-id="{{ $post->id }}">[x]</a> <form method="post" action="{{ url('/posts', $post->id) }}" id="form_{{ $post->id }}"> {{ csrf_field() }} {{ method_field('delete') }} </form> </td> </tr> @empty @endforelse <ul> </ul> @endsection

###PostController($wordだけでもちゃんと表示できています。)

public function search2(Request $request){ $word = $request->word; print $word; }

補足情報(FW/ツールのバージョンなど)

OS:mac

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

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

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

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

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

guest

回答2

0

search2に対し

html

1<input name="word">

のような要素を持つFormを使って送信している場合、$word = $request->word;の記述では値を取得できていないと思います。

以下のように変更するとどうでしょうか。

php

1$word = $request->input('word');

投稿2019/12/27 14:49

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Ms.yy

2019/12/28 01:55

おっしゃる通りhtmlはその様な感じです。 <input type="text" name="word" size="40"> wordの部分ですが「$word = $request->word;」の内容のままで受け取った値を表示できたので取得できているみたいです。その時に使用したコードを上記に貼らせて頂きました、
Ms.yy

2019/12/28 06:05

retlatさん最後までありがとうございます。"(-""-)"
guest

0

ベストアンサー

with()の使い方が違う。

複数の場合は配列で渡す。

return view('posts.search2')->with([ 'posts' => $posts, 'word' => $word ]);

変数名がword=$wordで同じ場合はcompact()使ってもいい。自分がいつも使うのはこれ。

return view('posts.search2')->with(compact('posts', 'word'));

compact()への渡し方も配列でもいい。

compact(['posts', 'word'])

ついで。compact()は使っていいけど逆のextract()は使ってはいけない。
配列から変数が生まれるとか危険すぎる。
https://www.php.net/manual/ja/function.compact.php
https://www.php.net/manual/ja/function.extract.php

投稿2019/12/27 12:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Ms.yy

2019/12/27 13:33

まさか渡し方が違っていたのとは。。。 ネットで調べて一番上に出た記事を参考にしていたので文法ミスとは考えもしませんでした。 早速教えて頂いた、文法をPostsControllerにセットしましたが、変わらず同じエラーでした????
Ms.yy

2019/12/28 02:03

すみません、再度試してみたらちゃんとできました! 使用していたcyberdockが再起動となり書き換えたコードがしっかり反映されていなかったのが原因でした。 悩んでいた部分なのでありがとうございます。^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問