【PHP/Laravel】rest-apiを取ってきて記事一覧作成する方法~blade内でのループや条件分岐など
| 更新: 2024/09/25 | 2804文字
今回は前回やったLaravelでrest-apiの記事を取ってくる件の続きで、記事一覧ページを作ってみます。apiの叩く形式・コントローラにメソッドを追加・bladeテンプレートでのループや条件分岐などを扱っていきます。早速内容を確認していきましょう。
目次
前回の内容(idで個別記事取ってきてbladeテンプレートで表示)
前回はLaravel bladeテンプレートにidごとのrest-apiデータを渡すというのを行いました。参考までにこちらもご確認ください。
なお、記事を取ってくるapiは、前回同様、管理人が持っている著作権フリー曲サイトSSFのrest-apiを使用します。
【PHP/Laravel】WordPress rest-apiのjsonを取ってきて、idで表示記事を切り替えるサイトの制作
https://division-web.atelier-ss-agency.com/10014/
下準備(rest-api関連)
apiを叩くときのパラメータ(一覧やカテゴリ,件数)を押さえる
{ドメイン}/wp-json/wp/v2/posts?per_page=30
→通常の記事一覧から、30件を取る(per_page=30)
{ドメイン}/wp-json/wp/v2/posts?categories=〇〇
→カテゴリid〇〇の記事一覧
{ドメイン}/wp-json/wp/v2/posts?tags=■■
→(今回は使わないが)タグid■■の記事一覧
apiを叩くときのパラメータは、事前に押さえておくとラクです。youtube apiとかでも一緒かもしれません。
rest-api内にidではなくカテゴリ名を入れて、そのまま表示に使う
詳しい説明は省きますが、WordPress rest-apiのデフォルト状態ではカテゴリ名でなく、カテゴリidがデータに入っています。一覧でカテゴリ名をそれぞれ出すとき、一度で表示するため、register_rest_fieldでidではなくcat_nameを登録しています。
なお、参考までにLaravelのController側にもcat_idを文字列に変換するものを入れていますが、プログラムの組み方によってはどちらか一方だけでよく、処理を一回減らせるというのもあると思います。(コントローラで書かないで、bladeで受け取ったデータからそのままとるとか)
Laravel rest-apiを取ってきて記事一覧作成するページのつくりかた
ルーティングで名前・コールバック1度に設定(routes/web.php)
前回やったときと、微妙にルーティング設定が変わっています。一覧に使うページは『rest-archive』にして、名前・コールバックgetArchivefromRestが一度に渡るようにしました。
->name('rest-archive');
裏でデータをどうにかしてページ生成したりする場合は、こっちのほうが都合よさそうな気はしますね。
コントローラに、一覧やカテゴリidが渡った場合のメソッド追加
前つくったRestControllerというクラスに、新しく『getArchivefromRest』という名前でメソッド追加しました。urlパラメータに『cat』が渡ってるかどうかで分岐します(叩くurlが変わる)。データを渡すviewはrest-archiveです。switchでpagetitleにカテゴリ名がidによってセットされる形に。
また、渡すデータについては、『$jsonview,$pagetitle』が・・・
のように書いて、複数の変数が渡るようにしてます。これをbladeテンプレートで使います。
bladeテンプレートでループ処理や分岐を使って、コントローラから渡ったデータを表示していく
bladeテンプレートも作っていきます。blade繰り返しディレクティブは、だいたいPHPとかのループと一緒なので、そんなに迷わないかも。また、ループ変数$loopを使うと、ループ回数が取得できたりします。
@php~@endphpの間には、普通にPHPのコードを書くように、変数セットができたりするようです。
この件数は、実はあとで使用して・・・ 件数によってページネーションが出力する、というような機能を作るとき使えます。記事だけでなく、在庫商品20件以上はページネーションで分けるみたいなのもよいでしょう。
Laravel 10.x Bladeテンプレート
https://readouble.com/laravel/10.x/ja/blade.html
表示例
ではさっそく表示を確認しましょう。urlはhttp://localhost/laravel/public/rest-archiveで、パラメータ無しの場合・・・ こんな感じで、通常の一覧がでます。
件数10件以上なので、ページネーション出力もokでした。
また、cat=40のときはこんな感じでrhythmと書いている記事が。
cat=39のときは、symphonicという感じで。
あとがき・まとめ
- Laravelでrest-api一覧記事を取るときも、コントローラでid処理できるようにする
- カテゴリや件数など、rest-apiを叩くときのパラメータは押さえておく
- Bladeテンプレートではループや分岐、変数セットなども、生PHPと似た感じで使える
まとめると、こんなところでしょうか。このほか『wp-json/wp/v2/posts?search=〇〇』みたいな感じで、フォーム内容で検索した結果を返したりしてもよさそうですね(search=の内容はコントローラで処理する)。
【カテゴリ】- Laravel
【タグ】- Laravel, PHP, WordPress_REST_API