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

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

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

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

Q&A

解決済

1回答

2808閲覧

laravelの入力フォームでの送信先のURLについて

karain

総合スコア98

Laravel 5

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

0グッド

0クリップ

投稿2018/05/15 07:23

編集2018/05/15 09:03

php

1{!! Form::open(['route' => ['favarites.store', $micropost->id], 'method' => 'post']) !!} 2 {!! Form::submit('favorite', ['class' => 'btn btn-default btn-xs']) !!} 3 {!! Form::close() !!}

laravelのbladeにて入力フォームを作成したのですが、URLが「/favarites?id」(idは数字)のようになってしまいます

本来であれば「/favarites/id」と?でなく/にしたいです。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

確認箇所1

LaravelのFormヘルパーのopenでメソッドをdeleteと指定しても出力されるの際にpostになっているかと思います。
これが原因でPOSTのルーティングに行ってしまっている可能性はないでしょうか?

以下、Laravel5.6の該当箇所のコードです。
https://github.com/LaravelCollective/html/blob/5.6/src/FormBuilder.php#L128

確認箇所2

routeの設定でidが書いてなかったりすると「/favarites?id」のようなURLを出力されるのでそちらも確認してみてください。

確認場所:routes/web.php

ダメな例(idが指定されてない)

php

1Route::post('/favorites', 'FavoriteController@destroy')->name('favorites.destroy');

正しい例(idが指定されている)

php

1Route::post('/favorites/{id}', 'FavoriteController@destroy')->name('favorites.destroy');

投稿2018/05/15 08:42

編集2018/05/15 09:14
YamajiDaisuke

総合スコア215

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

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

karain

2018/05/15 08:59

>確認箇所1 実は貼るべきソースを間違えておりました、すみません。 編集致しました。
karain

2018/05/15 09:02 編集

>確認箇所2 ```php Route::group(['prefix' => 'favarites/{id}'], function () { Route::post('favarites', 'UserFavoritesController@store')->name('favarites.favarite'); }); ``` なので、記述できていると思うのですが、、、
YamajiDaisuke

2018/05/15 09:12

間違えてますね。 prefixのところにidパラメータがついてます。 postメソッドの第一引数のところに指定します。 Route::post('favarites/{id}', 'UserFavoritesController@store')->name('favorites.favorite');
karain

2018/05/15 09:25

うーん駄目でした もしかすると上にある Route::resource('favarites', 'UserFavoritesController', ['only' => ['store', 'destroy']]); が邪魔してるんですかね??
YamajiDaisuke

2018/05/15 09:29 編集

書き損じなのか、元のコードがそうなってるのかがちょっとわかりませんが、 nameが'favorites.favorite'となっているので、 Formヘルパーは以下のようにしないといけないです。 Form::open(['route' => ['favorites.favorite', $micropost->id], 'method' => 'post']) あとfavaritesとfavoritesが混在しているのでその辺りを確認してみてはいかがですか?
YamajiDaisuke

2018/05/15 09:31

どうしてもできないようでしたら、 Form::open(['url' => route('favorites.favorite', ['id' => $micropost->id]), 'method' => 'post']) みたいな形でもいけるはずです。
karain

2018/05/15 10:14

/favorites?id=9 とURLが変わりました。
YamajiDaisuke

2018/05/15 10:20

routes/web.phpあたりを一回全部みせてもらえますか?
karain

2018/05/16 05:45

<?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::get('/', function () { return view('welcome'); }); */ Route::get('/', 'MicropostsController@index'); Route::get('signup', 'Auth\RegisterController@showRegistrationForm')->name('signup.get'); Route::post('signup', 'Auth\RegisterController@register')->name('signup.post'); Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login')->name('login.post'); Route::get('logout', 'Auth\LoginController@logout')->name('logout.get'); Route::group(['middleware' => 'auth'], function () { Route::resource('users', 'UsersController', ['only' => ['index', 'show']]); Route::group(['prefix' => 'users/{id}'], function () { Route::post('follow', 'UserFollowController@store')->name('user.follow'); Route::delete('unfollow', 'UserFollowController@destroy')->name('user.unfollow'); Route::get('followings', 'UsersController@followings')->name('users.followings'); Route::get('followers', 'UsersController@followers')->name('users.followers'); }); Route::resource('microposts', 'MicropostsController', ['only' => ['store', 'destroy']]); Route::post('favorites/{id}', 'UserFavoritesController@store')->name('favorites.store'); Route::resource('favorites', 'UserFavoritesController', ['only' => ['store', 'destroy']]); // Route::get('favorites', 'UserFavoritesController@show'); Route::group(['prefix' => 'favorites/{id}'], function () { Route::post('favorites/{id}', 'UserFavoritesController@store')->name('favorites.favorite'); Route::delete('unfavorite', 'UserFavoritesController@destroy')->name('favorites.unfavorite'); // Route::get('followings', 'UsersController@followings')->name('users.followings'); // Route::get('followers', 'UsersController@followers')->name('users.followers'); }); });
YamajiDaisuke

2018/05/16 07:00

Route::post('favorites/{id}', 'UserFavoritesController@store')->name('favorites.store'); Route::resource('favorites', 'UserFavoritesController', ['only' => ['store', 'destroy']]); ここじゃないですかね。 Route::resource('favorites', 'UserFavoritesController', ['only' => ['store', 'destroy']]); これでできるルーティングは[POST] [/favorites]ですね。で、 Route::post('favorites/{id}', 'UserFavoritesController@store')->name('favorites.store'); でできるのは [POST] [/favorites/{id}] です。 [/favorites/{id}]と[/favorites]の両方にfavorites.storeというルートネームがつけられてしまっていて、 [/favorites]が優先されてるかとおもいます。 一度、 Route::resource('favorites', 'UserFavoritesController', ['only' => ['store', 'destroy']]); の部分をコメントアウトして確認してみてください。
karain

2018/05/16 07:51

ありがとうございます! 無事に /favorites/9 とすることができました!
karain

2018/05/16 07:52

長い時間お付き合いいただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問