🔖

Laravel まったくわからん

2023/02/13に公開

Laravel まったくわからんので,わかるようにしていく過程を載せる

  • Laravel 6.x
    • Illuminate
  • PHP 7.x

Eloquent (ORM)

Arr (Illuminate\Support\Arr) / ヘルパー

  • Arr::only
    • assoc から指定したキーのみ含む assoc を作る
  • Arr::random
    • array からランダムで1つ選択する

PHP / array

  • array_keys
    • assoc からキーの配列を取り出す
  • array_key_exists
    • array のキーの存在チェック
  • array_merge
    • assoc をマージする
    • ... だと assoc をマージできない?
  • range
    • range(string|int|float $start, string|int|float $end, int|float $step = 1): array
  • array_diff
    • array_diff(array $array, array ...$arrays): array

PHP / String

  • explode

PHP / 関数

  • 呼び出しに ... を使うことで Traversable を実装した値を実引数に展開できる
    • 定義にも使える

PHP / trait

  • use
    • インポート的な

PHP

  • self::
    • クラスメソッドを instance メソッド内で読んだり
  • =
    • オブジェクトはリファレンス,それ以外はコピーする.
    • list を使うと分割代入できる.キー指定もできる.
  • ReflectionProperty
    • プロパティに対するリフレクションオブジェクトを作る.
    • アクセス権で無理したいときに使う
  • static
    • 静的なメソッドとかプロパティの宣言
  • ?
    • 型名の前に付けてオプショナルの宣言
  • "{$nam}"
  • is_null

PHP スコープ

  • グローバルスコープ
    • include したファイル側でも見れる
  • ローカル関数スコープ
    • グローバルスコープを見るために,global 宣言が必要
  • static 変数 (ローカル関数スコープ)
  • Closure

PHPUnit

  • expectException
    • 例外を期待する
  • スコープの記載が無いので,ヘルパーはstatic にして関数スコープの変数を使うと良さそう?
  • matcher が欲しい
  • 時間を操作したい
  • Pest - An elegant PHP Testing Framework
    • まだ変えるメリットは強くなさそう
  • Storage
    • Storage::fake
    • \Illuminate\Support\Facades\Storage
      • assertExists とか使える
  • データプロバイダー
    • テストの共通化になるのであまり使いたくない.
    • テストメソッドに @dataProvider アノテーションをつけて,メソッドを指定する.
    • データプロバイダーメソッドは,array を返す.それぞれがテストメソッドの引数に渡される
    • setUp / tearDown は各テストメソッドが実行される前に実行する.

テスト関連

Carbon 日付

  • https://carbon.nesbot.com/docs/#api-testing
    • startOfMonth()
      • なんで start やねん……
    • endOfMonth()
    • timestamp
      • time() 関数を使わない方がいいかも.
    • now()
    • withTestNow()
      • freeze できる.Carbon::now() とかを使うと良さそう

Blade / view

  • {{}} / {!! !!}
    • 埋め込み.エスケープするかしないか
  • $request->session()->flash('status', 'finished')

Routes

  • resource

Vim

workdir/fixer
#!/bin/sh

root=`dirname $0`

# skip 'fix' subcommand
if [[ $1 == 'fix' ]]; then
  shift
fi

( cd $root && docker compose exec php php artisan fixer:fix --path "${@}" )
let g:ale_fixers = {
  \ 'php': ['php_cs_fixer'],
  \ }
let g:ale_php_cs_fixer_use_global = 1
let g:ale_php_cs_fixer_executable = $HOME . '/workdir/fixer'
let g:ale_filename_mappings = {
  \   'php_cs_fixer': [
  \       [$HOME . '/workdir', '/var/www/src'],
  \   ],
  \}
.zshrc
function vi {
  if [[ $(pwd -P) = "${HOME}/workdir" ]]; then
    TMPDIR=$PWD/var/tmp vim "${@}"
  else
    vim "${@}"
  fi
}

雑感

  • PHP関数名難し過ぎるだろ……
    • Collection に寄せていった方がいいんだろうか?

Refs

Discussion