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>
Laravelアプリケーションの実行URLと、指定しているルーティングのURLの相対パスから、有効なURLであるか分かりますか?
http://localhost/words/autocompleteでアクセスした場合not foundとなります。
フォームのあるurlはhttp://localhostです。
質問の解釈が間違っていたら申し訳ございません。
ルーティングのwords/autocompleteのautocomplete部分を削除すると、ルーティングが見つからないとなってしまいます。
ビュー側で名前付きルートを{{ route('') }}と指定してあげればweb.phpの指定されたアクションメソッドが走ると認識しているのですが、違うのでしょうか?
URLが、words で始まるルート設定を、
記述順通りに全て(word/autocomplete も含めて)ご提示いただくことは可能ですか?
返信が遅くなってしまい、申し訳ございません。
wordsにかかわる全てのルーティングを追記いたしました。
回答2件
あなたの回答
tips
プレビュー