Laravel まったくわからんので,わかるようにしていく過程を載せる
- Laravel 6.x
- Illuminate
- PHP 7.x
Eloquent (ORM)
-
firstOrFail
/findOrFail
-
RecordNotFoundError
が出る
-
-
fill
- モデルオブジェクトに値を設定できる
-
with
- ActiveRecord で言うところの
joins
/includes
したい - with → eagloerLoad
-
load
は,ロード済みのCollection (Model) に使うもの?
- ActiveRecord で言うところの
-
has
- exists を確認する
-
getChanges
- save 済みだと,過去の値は取れなそう.
- factory
- state で特定の値のセットを使うことができる
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}"
- 文字列展開
- PHP: 文字列 - Manual
-
is_null
- https://qiita.com/mpyw/items/51bf42fe1ad8a7e535aa
-
!== null
がいいとある.
PHP スコープ
- グローバルスコープ
- include したファイル側でも見れる
- ローカル関数スコープ
- グローバルスコープを見るために,
global
宣言が必要
- グローバルスコープを見るために,
- static 変数 (ローカル関数スコープ)
- Closure
-
use
で渡される変数は,コピー?- 外で変えても変わらない
- https://www.php.net/manual/ja/functions.anonymous.php
-
&
を付けてリファレンスで渡す
-
PHPUnit
-
expectException
- 例外を期待する
- スコープの記載が無いので,ヘルパーはstatic にして関数スコープの変数を使うと良さそう?
- matcher が欲しい
- 時間を操作したい
-
Pest - An elegant PHP Testing Framework
- まだ変えるメリットは強くなさそう
-
Storage
Storage::fake
-
\Illuminate\Support\Facades\Storage
-
assertExists
とか使える
-
- データプロバイダー
- テストの共通化になるのであまり使いたくない.
- テストメソッドに
@dataProvider
アノテーションをつけて,メソッドを指定する. - データプロバイダーメソッドは,array を返す.それぞれがテストメソッドの引数に渡される
-
setUp
/tearDown
は各テストメソッドが実行される前に実行する.
テスト関連
-
Faker\Generator
が使える -
UploadedFile
が使える - Mockery が使える
shouldAllowMockingProtectedMethods
-
app->instance()
を使うと刺さるらしい.
Carbon 日付
-
https://carbon.nesbot.com/docs/#api-testing
-
startOfMonth()
- なんで start やねん……
endOfMonth()
-
timestamp
-
time()
関数を使わない方がいいかも.
-
now()
-
withTestNow()
- freeze できる.
Carbon::now()
とかを使うと良さそう
- freeze できる.
-
Blade / view
-
{{}}
/{!! !!}
- 埋め込み.エスケープするかしないか
$request->session()->flash('status', 'finished')
Routes
- resource
Vim
-
https://github.com/dense-analysis/ale/issues/3342
- wrapper じゃなくて,command を指定しろってことか
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
- PHP: PHP マニュアル - Manual
-
Installation 6.x Laravel
- Eloquent: Getting Started 6.x Laravel
-
Helpers 6.x Laravel
-
Arr
/ パス系 /Str
/ URL系
-
- PHPUnit マニュアル — PHPUnit latest Manual
- laravel/framework at 6.x
- Namespaces | Laravel API
- mockery/docs at 1.4.2 · mockery/mockery
- LaravelでRoute::resourceを使うときに気をつけること - Qiita