質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

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

Q&A

解決済

2回答

836閲覧

コントローラで取得したものを他のコントローラに渡したい

nieve

総合スコア33

Laravel 5

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

0グッド

0クリップ

投稿2018/07/14 09:25

フロントから↓のようにリクエストを投げてLaravelを使ってAPIでデータ取得を行おうとしております。

javascript

1axios({ 2 method : 'POST', 3 url: '/api/getItemData', 4 data: { 5 prop: 'xxxx', 6 } 7}) 8.then(r => { 9 console.log(r); 10}) 11.catch(function(error) { 12 console.log(error); 13}); 14

laravel側はこちらです↓

php

1[routes/api.php] 2Route::post('getItemData', 'Api\GetData@redirectToProvider');

php

1[contorollers/api/GetData.php] 2<?php 3 4namespace App\Http\Controllers\API; 5 6use Illuminate\Http\Request; 7use App\Http\Controllers\Controller; 8 9class GetData extends Controller 10{ 11 public function redirectToProvider(Request $request) { 12 return 'success1'; 13 } 14}

これはうまくいくのですが。。。
実際は、↑のものでアクセストークンを取得して、次のコントローラに渡したく、ルートを渡して

php

1[contorollers/api/GetData.php] 2<?php 3 4namespace App\Http\Controllers\API; 5 6use Illuminate\Http\Request; 7use App\Http\Controllers\Controller; 8 9class GetData extends Controller 10{ 11 public function redirectToProvider(Request $request) { 12 return redirect()->route('/api/getData', $request); 13 } 14}

php

1[routes/api.php] 2Route::post('getItemData', 'Api\GetData@redirectToProvider'); 3Route::post('getData', function($request){ 4 return 'failure...'; 5}); 6

と、リダイレクトを渡しているのですが、エラー500でうまく行かず。

他のコントローラーに渡すにはどうしたら良いのでしょう?

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

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

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

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

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

m.ts10806

2018/07/14 21:32

404じゃなくて500?であれば構文エラーとかなのでログが出ているはず。エラーログは確認されました?
nieve

2018/07/16 05:14

PHPの扱いに慣れておらず、申し訳ないのですが。。。 サーバー起動しているターミナルにはエラーが出ず、該当URLにブラウザでアクセスしてもエラーはでず、JSのajaxの結果としてエラーが表示されるだけなのです。。 どのように確認できますでしょうか?
m.ts10806

2018/07/16 05:27

サーバーのエラーログなのでサーバー内のディレクトリ、ログファイルを直接確認してください。どのサーバーかにもよるので今提示されている情報だけではわかりません。
nieve

2018/07/16 05:50

【mac OS X】で、【laravel→artisan serve】してサーバーを立ち上げております。 【 $ROOT/storage/laravel.log】を確認してみたのですが、【 local.ERROR: Method App\Http\Controllers\API\GetData::redirectToProvider does not exist. 】 と出ております。。。 リダイレクトを指定しているコントローラー(モデル?)でエラーのように見受けられますが、リダイレクトではなく文字列表示だけやったら意図しているものが返ってきているのですが。。。
guest

回答2

0

redirect()->route() ではなく redirect()->to() を使ってみてはどうでしょう?
redirect()->route()Route::get(...)->name()name() で付けた名前を使ってリダイレクト先を指定するときに使います。

投稿2018/07/14 21:12

yuuAn

総合スコア44

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

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

nieve

2018/07/16 05:12

教えていただき、ありがとうございます! やってみたところ、 リダイレクト先で設定した文字列ではなく、 リクエストを投げた自分自身(<!DOCTYPE html>↵<html lang="ja" 〜〜 のHTML)が返ってきてしまいました…。
yuuAn

2018/07/17 05:53

axios を使った呼び出しではなく直接ブラウザで `getItemData` にアクセスしても同じように HTML が返ってきますか? Chrome や Firefox や Edge など大抵のブラウザでは、F12 キーを押すことでデベロッパーツールというデバッグに便利なツールを開くことができます。 今回はそれのネットワークというタブを開くと、サーバーに対してどんなリクエストが行われたのかを確認することができます。 `getItemData` が HTML を返しているのか、`getItemData` にアクセスした後リダイレクトされた先で HTML が返されてるのかなどが確認できるかと思います。 また、その際に HTTP ステータスコードがちゃんと 200 や 302 になっているかどうかも確認してみてください。
yuuAn

2018/07/19 08:37

すみません。ブラウザからだと簡単に `POST` の送信を試してみることはできませんでしたね。 デベロッパーツールでの確認は axios を使ったリクエスト内容の確認にも使えますので、試してみてどんなリクエストが送られ、どんなレスポンスが返ってきているのかを調査してみてください。 おそらく以下のような流れになるのではないかと思います。 1. ブラウザからサーバーに `POST` リクエストが送られる 2. サーバーがこっちのページにアクセスしてねというリダイレクトレスポンスを返す 3. ブラウザがリダイレクトレスポンスを受け取る 4. ブラウザからリダイレクト先に指定された URL に `GET` でリクエストが送られる 5. サーバーから `GET` のレスポンスが返される 6. ブラウザがレスポンスを受け取る ここで chocol4t さんの仰るように `Route::post('getData', ...)` を `Route::get('getData', ...)` に書き換えることで、5. でルートが定義されていない旨のエラー(404 Not Found や 405 Method Not Allowed)になるのを防げると思います。 (同じ URL で `GET` も定義していれば、エラーにならずにそちらのレスポンスが返るかもしれません)
nieve

2018/07/26 05:51

反応が遅くなってしまい、申し訳ございません! 丁寧に記載いただき、ありがとうございます! chocol4t さんからいただいたように、Route::get('getData', ...) にすると、返ってきました!
guest

0

ベストアンサー

redirectを使用しているので、Route::get('getData')を実行しようとして見つからない為エラーが発生しています。

そのため、次のように定義し直して動作確認してみてください。

php

1// routes/api.php 2Route::post('getItemData', 'Api\GetData@redirectToProvider'); 3Route::get('getData', function($request){ 4 return 'failure...'; 5});

また、リダイレクトで別の処理に移しているので、
getItemDataで受け取ったリクエスト情報はそのままでは使用出来ません。

sessionを使って必要なデータを一時保存し、getData内で取り出すというような処理も必要になると思います。

投稿2018/07/18 03:33

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nieve

2018/07/26 05:54

反応、時間が経ってしまって失礼をいたしました! ありがとうございます!反応、返ってきました。 リクエスト情報の工夫はこれからやってみます。 (リクエスト情報&コントローラの関連についての整理したい一貫で起きた疑問だったのに、これがさらっと行かないのか〜TT)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問