tetero
@tetero (tetero)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

laravelのviewのformから値が受け取れない!!

解決したいこと

viewのformで入力されたものをcontrollerの $keyword = $_POST['keyword'] ? $_POST['keyword'] : ''; で受け取りたい!!
ですが、うまくいきません。。

発生している問題・エラー

  1. // $keyword = $_POST['keyword'] ? $_POST['keyword'] : '';
    $keyword = '金沢'; ↑ このように上をコメントアウトして直接値を入れているとviewにはちゃんと表示される。   
  2. formのactionを{{ route('/home') }}など色々設定してみたけどうまく行かない。下記のエラーが出る。 Route [/home] not defined. (View: /work/resources/views/home/top.blade.php)

$keyword = $_POST['keyword'] ? $_POST['keyword'] : '';
//$keyword = '金沢';

このようにコメントアウトを逆にすると下記のエラーが出る。
Undefined index: keyword

該当するソースコード

view

<form action="" method="POST">
{{csrf_field()}}
<div class="p-form">
        <div class="p-form-inner">
            <input type="text" name="keyword" placeholder="フリーワード検索(店名 地名、駅名など)">
            <input type="submit" value=検索>
        </div>
    </div>
 </form>
controller

  public function test2(){
    // $keyword = $_POST['keyword'] ? $_POST['keyword'] : '';  

      var_dump($_POST);

    $keyword = '金沢';
    $baseurl = 'http://webservice.recruit.co.jp/hotpepper/gourmet/v1/';
    $params = [
        'key' => 'APIキーは伏せさせて頂きます',
        'format' => 'json',
        'keyword' => $keyword,
        'count' => 20,
    ];
    $url = $baseurl . '?' . http_build_query($params, '', '&');

    // リクエストを送り結果を取得
    $result = file_get_contents($url);

    // 取得した翻訳結果のjsonをPHPの連想配列に変換
    $json = json_decode($result, true);
    // print_r($json);

    $shops = $json['results']['shop'];

        // エラーがあった場合
    if( isset($json['results']['error']) ){
      echo $json['results']['error'][0]['message'];
      exit;
    }

    // 取得件数
    $results_available = $json['results']['results_available'];
    if( $results_available > 100 ){
        $results_available = 100;
    } elseif( $results_available == 0 ) {
        echo '指定の条件ではお店が見つかりませんでした。';
        exit;
    }
     return view('home.top',compact('keyword','shops' ,'json','results_available'));
  }
route
Route::get('/home', 'App\Http\Controllers\HomeController@top');
Route::get('/home', 'App\Http\Controllers\HomeController@test2');

説明がわかりにくいとは思いますが、解決方法教えてください!!!
よろしくお願い致します!

0

1Answer

まずHTTPメソッドとパラメータについて理解したほうが良いと思います。
見たところPOSTリクエストしていなのでしょう。

Route::get('/home', 'App\Http\Controllers\HomeController@test2');

これは「/homeにGETリクエストしたときApp\Http\Controllers\HomeController@test2へ」という設定になるので、
test2()が処理されるということはつまり「POSTリクエストではない」、
よってPOSTリクエストのパラメータが入っている$_POSTが空になっています。

利用可能なルーターメソッド

formのactionを{{ route('/home') }}など色々設定してみたけどうまく行かない。

route()名前付きルートに対して使用します。

名前付けされてないので「Route /home は定義されていません」というエラーが出ます。

0Like

Comments

  1. @tetero

    Questioner

    無事にデータを渡すことができました!
    ご丁寧なアドバイスありがとうございます!

Your answer might help someone💌