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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

2回答

2127閲覧

laravelでルーティングが設定されているにも拘らず、404エラーが発生する

_takenoko

総合スコア18

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2020/06/17 05:23

編集2020/06/19 00:06

laravel 6.8

現在フォームに入力するとdbから検索候補をdatalistとして、表示する機能を作成していますが、ルーティングが設定されているにも拘らず404エラーが出てしまってうまくいきません。
一応postでも試したのですが、やはり404エラーが出てしまいます。
どなたかご助言頂けませんでしょうか。

ルーティング

php

1Route::get('/', 'WordController@index')->name('words.index'); 2Route::resource('/words', 'WordController')->except(['index']); 3Route::prefix('/words')->name('words.')->group(function () { 4 Route::get('/', 'WordController@search')->name('search'); 5 Route::get('/autocomplete', 'WordController@autocomplete')->name('autocomplete'); 6 Route::get('/perfect', 'WordController@perfect')->name('perfect'); 7 Route::get('/pertial', 'WordController@pertial')->name('pertial'); 8});

php artisan route:listの結果
| GET|HEAD | words/autocomplete | words.autocomplete | App\Http\Controllers\WordController@autocomplete | web

ビュー

php

1   <search-form 2 endpoint="{{ route('words.autocomplete') }}" 3  name="word"> 4 </search-form>

コントローラー

php

1 public function autocomplete(Request $request) 2 { 3 $words = Word::where('word', 'LIKE', "$request->word%") 4 ->orWhere('read', 'LIKE', "$request->word%") 5 ->limit(10) 6 ->orderBy('created_at', 'desc')->get(); 7 return response()->json($words); 8 }

コンポーネント

vue

1<template> 2 <div class="col-12"> 3 <i class="fas fa-search" aria-hidden="true"></i> 4 <input 5 type="text" 6 autocomplete="on" 7 list="word-list" 8 placeholder="Search" 9 name="word" 10 class="form-control form-control-sm ml-3 w-75" 11 aria-label="Search" 12 v-model="searchForm" 13 @input="getSuggestionList" 14 > 15 <datalist id="word-list"> 16 <option 17 v-for="result in results" 18 :key="result.id" 19 :value="result.word" 20 /> 21 </datalist> 22 <div> 23 <div class="custom-control custom-radio custom-control-inline p-5"> 24 <input type="radio" class="custom-control-input" id="type-0" name="type" value="0" checked> 25 <label class="custom-control-label" for="type-0">完全一致</label> 26 </div> 27 <div class="custom-control custom-radio custom-control-inline p-5"> 28 <input type="radio" class="custom-control-input" id="type-1" name="type" value="1"> 29 <label class="custom-control-label" for="type-1">部分一致</label> 30 </div> 31 </div> 32 </div> 33</template> 34 35<script> 36export default { 37 props: { 38 endpoint:{ 39 type: String, 40 }, 41 }, 42 data() { 43 return { 44 results: [], 45 searchForm: '', 46 }; 47 }, 48 methods: { 49 getSuggestionList() { 50 this.results = []; 51 if (this.searchForm.length > 0) { 52 axios.get(this.endpoint, { 53 word: this.searchForm, 54 }) 55 .then(Response => { 56 this.results = Response.data; 57 console.log(Response.data); 58 }) 59 .catch(error => { 60 console.log(error); 61 }); 62 } 63 } 64 }, 65} 66</script>

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

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

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

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

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

yuki84web

2020/06/17 05:49

Laravelアプリケーションの実行URLと、指定しているルーティングのURLの相対パスから、有効なURLであるか分かりますか?
_takenoko

2020/06/17 05:58 編集

http://localhost/words/autocompleteでアクセスした場合not foundとなります。 フォームのあるurlはhttp://localhostです。 質問の解釈が間違っていたら申し訳ございません。 ルーティングのwords/autocompleteのautocomplete部分を削除すると、ルーティングが見つからないとなってしまいます。 ビュー側で名前付きルートを{{ route('') }}と指定してあげればweb.phpの指定されたアクションメソッドが走ると認識しているのですが、違うのでしょうか?
mix-peach

2020/06/18 03:56

URLが、words で始まるルート設定を、 記述順通りに全て(word/autocomplete も含めて)ご提示いただくことは可能ですか?
_takenoko

2020/06/19 00:09

返信が遅くなってしまい、申し訳ございません。 wordsにかかわる全てのルーティングを追記いたしました。
guest

回答2

0

ベストアンサー

resourceが悪さをしているのではないでしょうか?

php

1Route::resource('/words', 'WordController')->except(['index']);

getで「/words/{word}」のようなルーティングが出来て、そこで引っかかるような気がします。
Route::resourceをweb.phpの最終行に移動させるとアクセス出来るようになるのではないでしょうか。

投稿2020/06/19 00:41

meshi_s

総合スコア276

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

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

_takenoko

2020/06/19 00:56

仰る通りresourceルートを最後にすることで結果が返ってくるようになりました。 引数に$word無くても引っかかってしまうんですね...。 勉強になりました。 ありがとうございました。
guest

0

先頭のスラッシュを取ってみると、どうでしょうか

php

1Route::get('words/autocomplete', 'WordController@autocomplete')->name('words.autocomplete');

投稿2020/06/17 06:39

yuki84web

総合スコア1857

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

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

_takenoko

2020/06/17 06:43

変わらず404エラーが出てしまいます...。
yuki84web

2020/06/19 00:11

Route::get('/', 'WordController@search')->name('search'); これをグループの中の一番下に持ってくるとどうですか?
_takenoko

2020/06/19 00:18

同じく404です。
yuki84web

2020/06/19 00:35

他のルーティングを一時的に削除してみて、該当のURLのみが使える状態に出来ますか?
_takenoko

2020/06/19 00:50

他のルーティング削除した結果アクセスできるようになりました。 ありがとうございました。
yuki84web

2020/06/19 00:53

順次元の状態に戻していき、原因になっているルーティングが判明したら、(他の方も回答されていますが)それを移動したり、他の設定方法を検討してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問