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

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

ただいまの
回答率

89.69%

post送信された場合の遷移について

受付中

回答 2

投稿 編集

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

toll_tree

score 29

laravelにおいて、postした際のページの遷移について、お聞きしたいことがございます。

以下は、コントローラー部分のHelloController.phpです。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Requests\HelloRequest;
use Validator;
use Illuminate\Support\Facades\DB;


class HelloController extends Controller{

    public function index(Request $request)
    {


        $items = DB::select('select * from people');
        return view('hello.index',['items' => $items]);

    }

    public function post(Request $request)

    {
        $items = DB::select('select * from people');

        return view('hello.index',['items' => $items]);


    }
    public function add(Request $request)
    {
        return view('hello.add');
    }

    public function create(Request $request)
    {
        $param = [
            'name' => $request->name,
            'mail' => $request->mail,
            'age' => $request->age,
        ];

        DB::insert('insert into people (name, mail, age) values 
        (:name, :mail,:age)',$param);
        return redirect('/hello');
    }




}


以下は、ルート情報を記述したweb.phpです

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/


// Route::post('hello','HelloContoroller@post');

//use App\Http\Middleware\HelloMiddleware;

Route::get('hello/add','HelloController@add');
Route::post('hello/add','HelloController@create');

Route::get('hello','HelloController@index');


以下は、ビュー部分であるadd.blade.phpです

@extends('layouts.helloapp')
@section('title','Add')
@section('menubar')
  @parent
  新規作成ページ
@endsection

@section('content')
  <table>
    <form action="/laravelapp/public/hello/add" method="post">
      {{ csrf_field() }}
      <tr><th>name:</th><td><input type="text" name="name"></td></tr>
      <tr><th>mail:</th><td><input type="text"></td></tr>
      <tr><th>age: </th><td><input type="text" name="age"></td></tr>
      <tr><th></th><td><input type="submit" value="send"></td></tr>
    </form>
  </table>
  @endsection

  @section('footer')
  copyright 2017 tuyano.
  @endsection


お聞きしたい部分なのですが、add.blade.phpからpost送信された場合、web.phpのRoute::post('hello/add','HelloController@create');こちらの処理が呼び出されるといった解釈であっていますでしょうか?
Route::postメソッドの第一引数である、「'hello/add'」はadd.blade.phpのフォームのactionで指定している、「/laravelapp/public/hello/add」ここと対になっており、add.blade.phpから送信された場合、Route::postメソッドが呼び出されるといった解釈であっていますでしょうか?

※現在の状況なのですが、add.blade.phpからpostするとタイムアウトとなってしまっている状況です。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • toll_tree

    2019/05/20 13:19

    自分の解釈は、質問本文にある通りです。

    キャンセル

  • m.ts10806

    2019/05/20 13:25

    会話のキャッチボールが成り立っていません。
    質問者の推測による解釈は何も信憑性はありません。
    プログラムは書いた通りにしか動かないのでその結果の現象、事象がすべてです。
    試したのであれば「実行した結果何が起きたか」を具体的に記載してください。「うまくいかない」は「では何が起きました?」という質問を引き出すだけでやり取りが何回も発生するだけです。
    あなたしか起きている問題を知らないわけです。何が起きたか一番知っている人が何も書かないのはやってはいけないことです。
    もちろん「起きた結果でなにを調べたか」「調べた結果試したこと」も記載必要です。
    丸投げで問題課題が発生していない質問なので非推奨のオンパレードです。

    キャンセル

  • m.ts10806

    2019/05/20 13:32

    あとこちらに補足を書かれてもデフォルト非表示なので必ず目に付くとは限りません(ほとんど見られないと思って良い)
    あくまでここは「質問への追記・修正の依頼」の欄なので、質問本文に記載してください。
    できれば質問テンプレートを使われたほうが良いでしょう。

    キャンセル

回答 2

+2

<form action="/laravelapp/public/hello/add" method="post"> 

インストール#設定

Laravelをインストールできたら、Webサーバのドキュメント/Webルートがpublicディレクトリになるように設定してください。

もしここの設定ができているなら/laravelapp/public/がルートディレクトリになるので、actionに指定している先はそもそも存在しないですね。
<form action="/hello/add" method="post">となるのが正しい。
もしWebルートの設定ができていなかったら動作は保証されない可能性もあります。

ただフレームワークを利用している場合にサイト内URLを呼び出すのに直で書くことってほとんどないです。
Webルート呼び出せるヘルパーメソッドが用意されていてそちらを利用します。

Laravelも例外ではなく、Laravelの場合、大抵は名前つきルート生成でroute()にてアクセスします。
他にもURL生成の手法はありますが、今回の場合はroute()が適当でしょう

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/05/20 13:46

    なので、/hello/addとすると、object not foundとなってしまいます

    キャンセル

  • 2019/05/20 13:48

    ストレートな表現すると「書籍よりマニュアルを見ろ」です。
    「ダメだったからそのままにした」だとそもそもフレームワークが使える状態にすらなっていないということになります。
    それにWebルートの話でしたらフレームワークの話というよりPHP本体(あとサーバー本体)の話になります。
    同じ環境で別プロジェクトをWebルート切り替えて使うこと、ざらにありますからね。
    レンタルサーバーでも別ドメイン(サブドメインでも)あてるときは必要な概念です。
    なので、何度も指摘されていると思いますが、Laravelを1回置いて、基本的な概念から学びなおしてください。
    Webルートの設定でつまずいているようではどのフレームワークにも入れません。

    キャンセル

  • 2019/05/20 13:52 編集

    ちなみに「indexページ以外がNot Foundになる」というような質問もあがったことがあり、原因は「Webルートの設定が正しくできていなかった」だったので、Webルートの設定なしにLaravelを使うことはできないということになります。(DocumentRootの設定なので「DocumentRoot」というキーワードで辿ればそこまで難しい話ではないです。)
    がんばってください。

    追記:
    >その通りにやってみたのですが、ダメだったんですよね
    これ「うまくいかない」と同じなのでご注意を。

    キャンセル

+1

こうしきどきゅめんとのとおりにかいてうごかしてみる
ばかみたいにおなじしつもんばっかりしてないであたまをつかうこと
おかねをはらってぷろぐらむつくってくれるひとにぷろぐらむつくってもらうこと
すきなほうほうをえらんでください

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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