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

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

ただいまの
回答率

90.34%

  • Laravel 5

    2079questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 176

nieve

score 5

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

axios({
  method : 'POST',
    url: '/api/getItemData',
    data: {
        prop: 'xxxx',
    }
})
.then(r => {
    console.log(r);
})
.catch(function(error) {
    console.log(error);
});

laravel側はこちらです↓

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

namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class GetData extends Controller
{
  public function redirectToProvider(Request $request) {
    return 'success1';
  }
}

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

[contorollers/api/GetData.php]
<?php

namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class GetData extends Controller
{
  public function redirectToProvider(Request $request) {
      return redirect()->route('/api/getData', $request);
  }
}
[routes/api.php]
Route::post('getItemData', 'Api\GetData@redirectToProvider');
Route::post('getData', function($request){
    return 'failure...';
});

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/07/15 06:32

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

    キャンセル

  • nieve

    2018/07/16 14:14

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

    キャンセル

  • mts10806

    2018/07/16 14:27

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

    キャンセル

  • nieve

    2018/07/16 14:50

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

    キャンセル

回答 2

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/16 14:12

    教えていただき、ありがとうございます!

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

    キャンセル

  • 2018/07/17 14:53

    axios を使った呼び出しではなく直接ブラウザで `getItemData` にアクセスしても同じように HTML が返ってきますか?

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

    キャンセル

  • 2018/07/19 17: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` も定義していれば、エラーにならずにそちらのレスポンスが返るかもしれません)

    キャンセル

  • 2018/07/26 14:51

    反応が遅くなってしまい、申し訳ございません!
    丁寧に記載いただき、ありがとうございます!

    chocol4t さんからいただいたように、Route::get('getData', ...) にすると、返ってきました!

    キャンセル

checkベストアンサー

0

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/26 14:54

    反応、時間が経ってしまって失礼をいたしました!

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

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Laravel 5

    2079questions

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