2015.11.3
0からはじめるPHP#50【アジャイルで作る掲示板#9-ページネーション-】
掲示板編の最終回です。今回のテーマは
ページネーションです。
ページネーションとは何かっていうと・・・・・・
要するにコレです。
自前でやろうとすると、いちいちデータベースを全件取得して、スライスして、現在のページを参照して・・・・・・などという手続きを踏まなければならないのですが、Larevelは
これを非常に簡単に作る機能がついているので、今回はそれを学習しようと思います。
といっても簡単です。
/*記事読み込み*/
$datas = DB::table("テーブル名")->paginate(5);
/**********/
return view("ビュー")
->with("datas", $datas);
基本
これだけです。なんと簡単なことでしょう。
ただ、これも原因は不明ですが
withでデータを渡さないとうまく渡せない模様。
どこにもそんなこと書いてないですが、実際配列で渡してもundefined variableエラーが出ます。
さらっと書いてますが
これで1日ハマってました。未だに意味分かんないですが動けば良いということで諦めます。
予測ですが、おそらくviewで一緒くたにできるのは普通の変数で、
オブジェクトはwithで渡さないといけない・・・・・・ってことかも知れません。
掲示板の作成は普通に簡単だと思うんですが、こういう仕様的なとこを学ぶのにこう時間を使われるんで難航していたのです・・・・・・。この辺は経験者にしか分からない悩みだと思います。(笑)
ビューの方は
特に説明することがないのでマニュアル見てください。
後はこの辺りのことをちょいちょいと応用していくだけで掲示板の機能は完成すると思われます。
僕が作る掲示板はログイン機能や管理者機能などは特に実装する予定はないし、その辺りは既に
#35や
#36、あとGUIでの編集に関しては
#37で触れてるんで、特に目新しい技術は必要にならないと思ってます。
掲示板を作るための基礎知識はこれで以上になります。後は応用していけばできると思います。
えーと、ここで皆様に謝らなければなりません。
全然「アジャイル」してないですねコレ。
こっからぐるぐるサイクルを回して行こうかと思ったんですが
別に自サイトの掲示板ごときでそんな大仰なことする必要性を感じないんですね。機能強化とかどうでもいいです。
そしてこの掲示板制作で学んだことがあります。
やっぱ設計って大事です。
行き当たりばったりで制作したことで、いくつか面倒なことが発生したりしました。
急遽コンストラクタを用意してみたり、場当たり的に色々やったせいでソースコードは非常に見難いのです。
さて、ここで
#41で見せた僕の設計図を見なおしてみましょう。
この簡単な図でどこまでやれるか、ってことでやっていたわけですが、一番大きな問題は何かわかりますでしょうか。
作ってて一番思ったのは
「ロジック」の設計がないというところが最悪だなって思いました。
どういう関数を用意したら良いのか、どういう静的変数を用意すると良いのか、っていうのがあるとすごいコーディングがしやすいなと感じました。
で、それに伴って仕様決定をしていくことで、より効果的なコードが書けると思います。
バリデーションのロジックをコーディングした時、日本語しか使えないことによるデータベースのカラム名との乖離も、最初からその橋渡しとなる配列とかを用意しておけばコード量も減って、foreachで回せるような工夫ができたかも知れません。
ただ、場当たり的に書きまくった結果、そういうことができないまま突き進んでしまい、後戻りがしにくくなってしまったのが反省点です。
まぁ、バリデーションを日本語表示しようと思うとname値に日本語を使うしかない、っていうのは後になって知ったことですし仕方ないことかも知れませんが、それ抜きにしても、やっぱり
効果的な関数の使い方というのを考えるべきでした。
この反省を踏まえて、次シリーズをまた新たに始めたいと思っています。
「まだ続けんのかよ」って言われそうですが、続けます。(笑)
次回からは本格的なデータベース運用を、ということで
「音楽素材」のデータベース化をやろうと思っています。
すっかり忘れてましたが、これも僕が作ってみたいものの一つだったのを今思い出したので作ります。
というか、今までの知識の集大成とも呼べるような、そんな感じのもので、これもあまり新しい知識ってそんなないんですが、発展させた形のものになる予定です。
で、おそらくこれでうちのWebページの改造はこれで終わりになると思います。
#50達成を記念して・・・・・・というわけでもなんでもないのですが、一人寂しくQ&Aをしてみたり、過去に自分が発言したことに対する否定とかします。
Q1.日記はデータベース化しないんですか?
タグとかをつけるためにはデータベース化しないと対応できないのですが、あくまでも僕が書いてるのは
「日記」です。
一応、性質上広義的にはブログに当てはまるのですが、僕がやってるのはブログではないつもりです。ただの日記です。
なので、日付とタイトルがあれば良いと思っています。検索機能なんか要らないと思いますし、ニュースサイトでもないので関連記事なんてわざわざ作る必要もありません。必要があれば自分でリンク貼ります。
Q2.コメントフォームをSQLiteで書き直すって話はどうなったんですか?
SQLiteの致命的な弱点として
サーバー型でないので同時書き込みができないというものがあります。
つまり、SQLiteとして運用しても問題ないのは、それこそ日記など
自分一人しか書き込み権限がないものに限定されます。
可能性は限りなく低いとはいえ、同時に書き込もうとするとエラーが出るという性質上、SQLiteを用いた実装は非現実的であるのです。
ただ、多少ユーザビリティを上げるために、Laravelでコメントフォームを実装し直す、ってのはアリだと思うんですが、そこまでの必要性はないと思うので暫くは放置させてください。
ほんとはクッキーとかの実装も付け足した方が良いとは思ってるんですけど、めんどくさいですしね。ブラウザの機能でも使って下さい。(笑)
Q3.音楽素材ページの改修が終わったらどうするんですか?
一応、このPHP連載はシリーズ物として一旦終える予定です。後は番外編としてちょこちょこ
秘密裏に作る予定のプロダクトの紹介でもしたいなと思ってます。
とりあえず、現段階では3つほど、それなりに需要がありそうで、かつ自分が作れそうなWebサービスの構想を持ってます。1つでも当たるといいですね。
Q4.次につけるべきスキルはなんですか?
決まってます。
スマートフォンアプリ開発です。
あまりこういうことをべらべら喋るのは良くないと思うんですが、僕は
アプリ市場はコスパ悪いと思ってます。
何故かはあまり言いたくないのですが、アプリをメインにするのは絶対に間違っていると思います。
が、
アプリはめちゃくちゃ強い。
言ってることが矛盾してますが、アプリの開発ができないと結局は話になりません。だって、便利でしょ?皆さん。
アプリ開発は
挫折した前科があるんであまり優先して取り組んでなかったんですが、やはり逃げているわけにもいかないので、練習作をいくつか作って公開できたらなって思います。
こんな感じの方針で頑張りたいと思います。はい。
とりあえず音楽素材ページ改修に関しては、今年中の完成を目指します。宜しくお願いします。