運営維持のために広告をブロックしないでというお願い
ネットの反応を見ると賛否ありそうですが、OSS本体だけでなくこのようなOSS周辺のドキュメントなども今後のありかたや使う側の関わり方を考える時期に来ているのかも。
無料とは思えない充実っぷり
PHP 9.0から、未定義変数をWarning → エラーに変更するRFCが投票中、可決されそう
PHP9 はまだ数年後の話ですが、今からWarningを潰し始めないと大変そう。
ソシャゲの運用を想定して4種類のキャッシュ機構(APCu,OPcache,memcached,Redis)のメモリ枯渇を検証した記事です。
当たり前ですがどのキャッシュ機構を使った場合でもメモリ枯渇を想定してアプリ側の制御や設定値のチューニングをちゃんとしましょうということのようです。
モダンなPHPの機能を使わなくてもPHP5で良いコードが書けることをサンプルコードを交えて紹介されていました。
うん、まあ、でも、できればPHP8にしたいよね。
2000年問題ってありましたね…
8.0.2
以上となった
docker-compose.json
の変更が必要Swift Mailer
から SymfonyMailer
に変更
Swift Mailer
のメンテナンスが止まっていることが原因Swift Mailer
と Symfony Mailer
の互換性はこちらで確認Storage
ファサードによって提供されるファイル操作系処理を強化する Flysystem
のバージョンアップ
Eloquent のアクセサーとミューテタの修正
Laravel 9 以前
public function getNameAttribute($value)
{
return strtoupper($value);
}
public function setNameAttribute($value)
{
$this->attributes['name'] = $value;
}
↑ モデルにアクセサーとミューテタにプレフィックス付きのメソッドを定義する必要があった
Laravel 9
use Illuminate\Database\Eloquent\Casts\Attribute;
public function name(): Attribute
{
return new Attribute(
get: fn ($value) => strtoupper($value),
set: fn ($value) => $value,
);
}
↑ プレフィックスなしのメソッドに戻り値の型を指定(Attribute)することでアクセサーとミューテタが定義可能
※ PHP 8.1 で稼働させている場合のみ動作
モデルに挿入する値をEnum型でキャスト可能
use App\Enums\ServerStatus;
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'status' => ServerStatus::class,
];
Enumの定義
enum Category: string
{
case Fruits = 'fruits';
case People = 'people';
}
ルーティングの記載
Route::get('/categories/{category}', function (Category $category) {
return $category->value;
});
親のモデルと子のモデルを使用してRoute model bindingを行いたい場合、子のモデルにはカスタムキーを使用する必要があった。
use App\Models\Post;
use App\Models\User;
Route::get('/users/{user}/posts/{post:slug}', function (User $user, Post $post) {
return $post;
});
scopeBindings()を使用することで、カスタムキーなしでも子のモデルに対してRoute model bindingを行えるようになった。
use App\Models\Post;
use App\Models\User;
Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) {
return $post;
})->scopeBindings();
グループ内のすべてのルートに共通のコントローラを定義できるようになった。
# これまで
# 何度もController名を書かないといけない
use App\Http\Controllers\OrderController;
Route::get('/orders/{id}', [OrderController::class, show]);
Route::post('/orders', [OrderController::class, store]);
# laravel9~
use App\Http\Controllers\OrderController;
Route::controller(OrderController::class)->group(function () {
Route::get('/orders/{id}', 'show');
Route::post('/orders', 'store');
});
$table->text('bio')->fullText();
$users = DB::table('users')
->whereFullText('bio', 'web developer')
->get();
Laravel Scoutデータベースエンジンのサポート
use Illuminate\Support\Facades\Blade;
return Blade::render('Hello, {{ $name }}', ['name' => 'Julian Bashir']);
x-slot
タグを短く書くことができるようになるBEFORE
<x-alert>
<x-slot name="title">
Server Error
</x-slot>
<strong>Whoops!</strong> Something went wrong!
</x-alert>
AFTER
<x-slot:title>
Server Error
</x-slot>
Blade に以下のタグが追加
<input type="checkbox"
name="active"
value="active"
@checked(old('active', $user->active)) />
<select name="version">
@foreach ($product->versions as $version)
<option value="{{ $version }}" @selected(old('version') == $version)>
{{ $version }}
</option>
@endforeach
</select>
use Illuminate\Pagination\Paginator;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Paginator::useBootstrapFive();
}
route:list
CLI Outputroute:list
の CLI 表示が見やすくなった!test
Command上記の通り変更して composer update
を行う
おすすめポイント
8.0.2
以上である必要があるが、ローカルPC側の PHP のバージョンが 8.1
まで上がってしまっていると composer update が失敗してしまう
docker run --rm --interactive --tty \
--volume $PWD:/app \
composer update
$headers
の修正 protected $headers = Request::HEADER_X_FORWARDED_ALL;
protected $headers =
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
docker-compose
に記載しているPHPバージョンの変更が必要
sail build --no-cache
sail artisan sail:publish
でDockerfileをカスタマイズしている場合
docker-compose.yml
の laravel.test
コンテナの build 定義を以下の通り修正