cakePHP4でカートを作ってみる

# まえがき
PHPとSQLを勉強したいと思った私は、「…そうだ、カート作ろう！」と京都へ行くノリで手を動かし始めました。
カートを作る、にしても、言語やフレームワークはどうするか（というかそもそもどんなフレームワークがあるのか？）、どんなカートにするのか（カートのフロント側のターゲットとか、システム側の機能・要件）とか、というかまず自分にそんなの作れんのか！？（ここについては思い立ってから3ヶ月弱、今もまだ格闘中なので答えは出ていないが）とか…色々悩みはあるけれど、まずは始めてみた私だ。

:::note warn
Caution
この記事は、自分が勉強した内容に対する振り返りも兼ねてですが、何よりも「頑張ったでしょ！」という承認欲求を満たすためのものです。
間違いや意味不明な内容などもあるかもしれませんので、読み進める場合は、どうぞ広大な大地のような心でお読みください。
:::

# 作るために使う道具
- cakePHP4(PHP Ver.8.1.11)
- mySQL (Ver.8.0.30)
- 私の脳（Ver.PHPもmySQLも、ほとんどよく分かっていない版）
# 作業履歴
※本来は企画・設計→デザイン→システム（＋マークアップ）かもだけど、趣味＆1人作業＆PHPとSQLを学ぶのが主の目的のため、順当な流れなんてクソくらえ！いかに飽きないように進められるかが一番大事なんじゃい！！（と自分に言い聞かせる必要がある作業履歴です）

下の各項目について、少しずつ記事にしていこうと思っています。地道に頑張るぞー✊
1. 勉強することを思い立った経緯
2. phpをローカルで動かす[システム]
3. mySQLをローカルで動かす[システム]
4. phpMyAdminをローカルで動かす[システム]
5. フロント画面のコンセプト設定[企画・設計]
6. フロント画面のペルソナ設定[企画・設計]
7. フロント画面のベンチマーク選定[デザイン]
8. CakePHPをローカルで動かす[システム]
9. PHPとDBの接続[システム]
10. フロント画面のロゴ・アイコン作成[デザイン]
11. サイトマップ作成[企画・設計]
12. フロント画面の使用アイコン選定（フロントのトンマナ決め）[デザイン]
13. DB構成を設計[システム]
14. [ターミナルコマンド整理]()[システム]

https://qiita.com/may9create/items/8fcf3094b731a50d2ea5

15\. frontとadminを分ける(cakePHPの勉強)[システム]
16. 管理画面作成（css調整）[デザイン]
17. フロント画面作成（商品一覧、商品詳細画面作成＋css調整）[デザイン]
18. フロント画面（サイドバー作成＋css調整）[デザイン]
19. フロント画面（ヘッダー＆スマホメニュー＋css調整）[デザイン]
20. ロリポップサーバーにデータ移行（結果できませんでした😂）[システム]
21. さくらサーバーにcakePHPインストール＆作成途中データを移行[システム]
22. ローカル上のphpMyAdmin動作不良を直す（直らなかったのでphpMyAdminを諦める😂）[システム]
23. mySQLコマンドの勉強（phpMyAdminに頼らないシステム構築）[システム]
24. mySQLのセッティング＋インポートとエクスポート[システム]
25. 管理画面ボタン調整（requiredが全部入力されると登録ボタンが押せるようにする）[デザイン＋システム]
26. 管理画面で商品の編集機能実装[システム]
27. 管理画面で商品の削除機能実装[システム]
28. 管理画面デザイン[デザイン]
29. 管理画面（管理者一覧）作成[デザイン＋システム]
30. editor.jsについて調べる（商品登録画面で使いたいので）[システム]
31. 管理画面で「はい」「いいえ」のみの選択肢の[チェックボックスをトグルボタンにする](https://qiita.com/may9create/items/5f9ce17a7759cf5d4089)[デザイン]

https://qiita.com/may9create/items/5f9ce17a7759cf5d4089

32\. 管理画面のログイン周りデザイン[デザイン]
33. フロント画面のログイン周りデザイン[デザイン]
34. 管理画面の顧客情報関連画面作成[デザイン]
35. ログインパスワード登録時のハッシュ化[システム]
36. CakePHP Authenticationを使ってログイン認証[システム]
37. ログイン画面のパスワード入力欄の中身表示or非表示js[デザイン＋システム]
38. ログイン中か否かで条件分岐（ログイン＆ログアウトボタンの表示切り替え、マイページ表示）[システム]
39. マイページ画面デザイン[デザイン]
40. フロント画面のフッターデザイン[デザイン]
41. フロント画面の新規会員登録画面デザイン[デザイン]
42. [YubinBangoライブラリで住所を自動入力](https://qiita.com/may9create/items/d54b79f3ca1b36b187b0)（郵便番号を入力したら住所が自動入力される）[システム]

https://qiita.com/may9create/items/d54b79f3ca1b36b187b0

43\. 管理画面の[日付入力欄でデイトピッカーを使う](https://qiita.com/may9create/items/614028e4e510a88ded1f)[システム]

https://qiita.com/may9create/items/614028e4e510a88ded1f

44\. Vue.jsを使ってドラッグで画像登録（結局実装できてない😂）[システム]
45. 商品登録画面で画像登録（「ファイル選択」ボタンを押して登録したら該当ディレクトリに画像が保存される）[システム]
46. 複数枚の商品画像を商品詳細に表示（サムネイル画像をクリックでメイン画像が切り替わる）[デザイン]
47. 商品カテゴリ登録画面作成[システム]
48. 商品カテゴリ削除機能実装[システム]
49. 商品カテゴリ編集機能実装[システム]
50. 商品カテゴリ一覧画面でカテゴリの順番入れ替えをドラッグでする（[SortableJS導入](https://qiita.com/may9create/items/2fec5d979b811cb48ffb)、まだDB保存はできてない😂）[システム]

https://qiita.com/may9create/items/2fec5d979b811cb48ffb

51\. 商品登録画面で、商品カテゴリで登録したもののみカテゴリに選べるようにする[システム]
52. フロント画面で商品カテゴリ一覧を表示（foreachで）[システム]
53. フロント画面の商品詳細「お気に入りボタン」作成[デザイン]
54. お気に入りボタン押下でDBに商品IDを登録（まずは1商品）[システム]
55. （ここから先はまだ進んでません🙃）

# 今後の展望
上記のように作業を地道に続け（作業履歴を増やし）つつ、その中で勉強したこと、考えたことなんかを少しずつ記事にしていこうと思っています。
さて、私はcakePHP4を使ってカートが作れるのか！？
乞うご期待！！