icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【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を使用します。

下準備(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が一度に渡るようにしました。

Route::get('/rest-archive', 'App\Http\Controllers\RestController@getArchivefromRest')
->name('rest-archive');

裏でデータをどうにかしてページ生成したりする場合は、こっちのほうが都合よさそうな気はしますね。

コントローラに、一覧やカテゴリidが渡った場合のメソッド追加

前つくったRestControllerというクラスに、新しく『getArchivefromRest』という名前でメソッド追加しました。urlパラメータに『cat』が渡ってるかどうかで分岐します(叩くurlが変わる)。データを渡すviewはrest-archiveです。switchでpagetitleにカテゴリ名がidによってセットされる形に。

また、渡すデータについては、『$jsonview,$pagetitle』が・・・

return view('rest-archive',compact('jsonview','pagetitle'));

のように書いて、複数の変数が渡るようにしてます。これをbladeテンプレートで使います。

bladeテンプレートでループ処理や分岐を使って、コントローラから渡ったデータを表示していく

bladeテンプレートも作っていきます。blade繰り返しディレクティブは、だいたいPHPとかのループと一緒なので、そんなに迷わないかも。また、ループ変数$loopを使うと、ループ回数が取得できたりします。
@php~@endphpの間には、普通にPHPのコードを書くように、変数セットができたりするようです。

この件数は、実はあとで使用して・・・ 件数によってページネーションが出力する、というような機能を作るとき使えます。記事だけでなく、在庫商品20件以上はページネーションで分けるみたいなのもよいでしょう。

表示例

ではさっそく表示を確認しましょう。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
【タグ】- , ,

関連記事