EGO-LOG

40代2児の父。主にプログラム学習と開発、仮想通貨、メタバース、たまに関係ないことを綴る。

(2022/4/3)Laravel 16日目 -- データ削除、ページネーション、検索 --

PHP Laravel で掲示板。

スレッド削除でエラーになっていたところ。

 

【挑戦】Laravel 8 で簡易的な掲示板を作ってみた

 

■ルーティング情報修正

エラーの原因はこれかー、先走りというか後を読んでなかった。

 

web.php

-Route::redirect('/', '/bbs');
+Route::redirect('/', '/thread');

- Route::resource('bbs', 'App\Http\Controllers\ThreadConroller');

+Route::resource('thread', 'App\Http\Controllers\ThreadConroller');

 

index.blade.php

-<form action="{{route('bbs.store')}}" method="POST">

+<form action="{{route('thread.store')}}" method="POST">

 

ここまでで返信ができることは確認。

URLは localhost:8000/bbs から localhost:8000/thread に変更

 

■ページネーション

スレッド件数が多くなってくると全部表示するのは現実的でないので、

1画面に一度に表示する件数を絞る。ページネーションと呼ぶんですね。

 

ThreadController.php

public function index()

-$threads = Thread::orderBy('created_at', 'desc')->get();
+$threads = Thread::orderBy('created_at', 'desc')->paginate(3);

上記なら3件

 

ページ移動で固定で記述していた部分を修正

index.blade.php

-<p class="justify-center text-blue-300 link-hover cursor-pointer">prev 1 2 3 4 next</p>
+<p class="ms-5">{{ $threads->links() }}</p>

 

Controllerにlinks関数があってこれを呼び出すといい具合にページングしてくれるみたい。

で、表示してみたら

f:id:tenomeuonome:20220403033420p:plain

どーん。なんじゃこりゃ

 

Laravelでpaginateした時の矢印がやたら大きくなる原因 | TURNING POINT

ググったらそのまんまの記事があった。

 

レイアウトが崩れる原因はLaravelのページネーションがデフォルトでTailwind互換になっているからです。

なんと。Tailwindが基準になってるのか。

bootstrapを使用しますよという記述を追加。

app\Providers\AppServiceProvider.php

public function boot()
{
    Paginator::useBootstrap();
}

先頭に 下記が必要。

use Illuminate\Pagination\Paginator;

Laravel8 でPaginationを簡単に美しく実装する方法【Bootstrap利用】 | 40代からプログラミング!

なんでも、Laravel7まではBootstrapが標準だったが、Laravel8からはTailwindが標準になったんだとか。

Bootstrapはjqueryベースなので動作が重いのが不評の原因だったが、

Bootstrap5からはjqueryを使わなくなった。

Laravelとしては動作が重いBootstrapを見限った流れだったのだろうが、改善してきたので肩透かしみたいな感もあるのだろうか。

雑感は置いといて、修正後の表示

f:id:tenomeuonome:20220403035903p:plain

できました。

こんなに簡単に実装できちゃっていいんでしょうか、というぐらいコードが少なくて済むんだなぁ

 

■削除は?

で、結局スレッド削除はできたのか。

f:id:tenomeuonome:20220403041847p:plain

f:id:tenomeuonome:20220403041901p:plain

削除された。web.phpの調整が足りてないのが大きかったようです。

 

■検索

検索処理も実装していく。

index.blade.php

-<form action="/" method="post">

+<form action="{{route('thread.search')}}" method="post">

 

-<input class="border rounded px-2 flex-auto" type="text" name="serch_message">

+<input class="border rounded px-2 flex-auto" type="text" name="serch_message" required>

 

web.php

+Route::post('/thread/search', [ThreadController::class, 'search'])->name('thread.search');

 

ThreadController.php

f:id:tenomeuonome:20220403045514p:plain

検索フォームに文字列を入力して検索ボタンを押下すると、

Target class [App\Http\Controllers\ThreadController] does not exist.

のエラー。

web.php

Route::post('/thread/search', [ThreadController::class, 'search'])->name('thread.search');

の書き方が違うっぽい。

 

ごちゃごちゃやったあげく、ThreadControllerのクラス名をスペルミスしてたことに気付く。じゃあ直したらどうなるのとファイル内のクラス名を直接修正したら、今度は掲示板の画面そのものが表示されなくなってしまう。

LaravelでControllerの名前を変更する方法 - Qiita

ファイル内を修正するのはかまわんけど、下記コマンドを実行しましょうと。

$composer dump-autoload

generateが始まってから終わらないんだが・・・

PHPフレームワーク「composer dump-autoload」の重要性について - Qiita

composerが使えるまでは、ファイルの依存関係をrequireで記述してたけど、

使えるようになってからはコマンド1つで再構成できる大事なコマンドであると。

分かったから終わってくれいー(10分経過)

 

やっとコマンドが終了したがコマンドの警告?

Class xxx located in "ファイルパス" does not comply with psr-4 云々

Laravelのクラス読み込みエラーを解決する|fumi|note

!!! クラス名と同じくファイル名も間違っているではないか。

ファイル名とクラス名をあわせたら今度はすんなり通った。

 

起動してページを読み込んでみると通った。

肝心の検索は・・・?

f:id:tenomeuonome:20220403062030p:plain

エラーは出ないけど、検索もできない。

検索文言入れても入れなくても変わらず。

あと一歩という所なのだが・・・時間切れ

 

続く!