Open2
php/laravelことはじめ
config周り
- .env使ってる
- APP_ENV環境変数で読み込むenvファイル切り替える(NODE_ENV的なやつ)
- 一部予約名があるから注意
- configのcacheができるらしい
- artisanでメンテナンスモードにすぐ入れる
ディレクトリ周り
config
- web.php
- ビューとバックが密結合したコードはこちら?
- web middleware groupに入れられるためセッション情報を保持しやすいらしい
- return viewだけじゃなくてstreamedResponseも返せるみたい
- api.php
- web middleware groupではなくapi middleware groupに入っているのでsession stateへのアクセス不可
- 必要ならsanctumを使えとのこと
database
- マイグレーションとか管理してる
storage
- コンパイルされたbladeテンプレートとかファイルベースのセッションが保存されるらしい
test
- *Test.phpで終了するテストファイルを格納しとく
vendor
- composerの依存関係が保存される
app周り
http/console
- consoleはartisanからのコマンドを管理しておける
- httpは普通のコントローラー
event
- デフォルトでは作成されないがドメインイベントの実装に役立ちそう。これ便利だな
- symfony mailerを使ってメール送れる
- メール本文はphpファイルとして表現できる(resources/views/mailsの中に格納されている)
model
- eloquentのモデルを格納している(active record的な)
providers
- DIコンテナ的な立ち位置だろうか
- 共通する処理とか拡張機能を書くところっぽい
フロントエンドまわり
inertia
- reactを簡単に組み込めるようになるらしい
- このサンプルプロジェクト読んでみよ
- tsを採用するならこの記事に添えば良さそう
- breeze使って遊んでみようかな
気になってること
-? 'env' => env('APP_ENV', 'production'),
- APP_ENV未指定の場合productionのenvが読み込まれるの地味に怖い気がするけど気にしすぎかな
-? composerはapp配下をデフォルトでロードする
-? httpが対応している'form request'って何だろう
-? phpの記法に慣れなきゃ - ?記号
- $記号
- ? composerでbreeze追加しようとしたらメモリーエラー
-
composer self-update --2
でバージョンあげてみた - ライブラリの依存関係エラーが多発した
- ひとまず最新のphp8.1.7にしたら黙った
-
composer config platform.php 8.1.7
した - 依然エラーでる
Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 7.3.29-to-be-removed-in-future- macOS.
- 脳死で入れたけど実際にcomposerが起動時に使うphpのバージョンを指定しているわけではなさそう
- これ以上のバージョンを必要としてるライブラリを入れられないようにしてるロックっぽい
- phpenv入れる
- 8.1.7を入れようとしたらエラー
expr: not a decimal number: 'PHP'
- 8.0.20にしてみよう
- 必要なライブラリが不足していた
PHP_BUILD_CONFIGURE_OPTS="--with-bz2=$(brew --prefix bzip2)" phpenv install 8.0.9
- エラー内容が変わった(
configure: error: Please specify the install prefix of iconv with --with-iconv=<DIR>
) PHP_BUILD_CONFIGURE_OPTS="--with-bz2=$(brew --prefix bzip2) --with-iconv=$(brew --prefix libiconv)" phpenv install 8.1.7
configure: error: Cannot find libtidy
- 必要なライブラリ大杉内
brew install tidy-html5
brew install libzip
-
気になってたこと
- sail起動とartisan起動の違い
- sailはdocker-compose使って自動的にdbとかmaihogとかlaravelアプリを動かす上で必要な外部サービスもまとめて起動してくれる感じかな
- docker psすると大量に立ち上がってる
- 開発時に気軽に使えるよって感じの立ち位置かな
- artisanはlaravelのweb app部分だけを立ち上げてるっぽい
- 本番はこっちって感じなんだろうか
- sailはdocker-compose使って自動的にdbとかmaihogとかlaravelアプリを動かす上で必要な外部サービスもまとめて起動してくれる感じかな
inertia
仕組み
- 要はルーティングライブラリで<Link>タグでラップすることによりページ全体のリクエストをxhrに変換する
- 最初のリクエストに対してhtmlレスポンスが帰ってくるが、その際にdata-pageがattributeにくっついたdiv id="app"が含まれている
- next.jsのgetServersidePropsみたいなイメージで使えるのかな。レンダリングはされないけど
- 自動的にx-inertiaヘッダを付与してリクエストを飛ばす。受け取ったサーバーはhtmlではなくjsonを返す
- inertia visitとstandard full page visitが存在することが肝
- jsonの中身とdata-pageの中身はどちらも'page object'と呼ばれる形式に沿っている
- component
- props
- url
- version
- こいつが変わったらinertia visitじゃなくてfull page visitに自動的に切り替える
- x-inertia-versionにバージョンを含めて送る
- サーバー側で差分を検知したら409を返す。かつx-inertia-locationヘッダを付与して返す
- もしflash dataが存在する時に409が起きたらもう一度flashする
- この辺の話かな
- 一時的な成功/失敗表示とかに使うやつかな
気になったこと
- ?swrとの組み合わせ
- ?reduxとの組み合わせ
- shared-dataの仕組みに寄せざるを得ない?
- これ全てのリクエストにshared-dataを入れておくってことなのかな...
- 名前空間も被る可能性があるらしい
- ?既存の認証との組み合わせ