↑の関連
前提
LivewireのComponentでは$queryString
という変数をオーバーライドすることでURLにクエリを付与したり書き換えたり出来ます。
https://laravel-livewire.com/docs/2.x/query-string
例えば、web.phpで↓のようにコンポーネントへのルーティングを行い、
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', \App\Http\Livewire\Item::class );
それからComponentで$qs
を$queryString
へ追加してから
<?php
namespace App\Http\Livewire;
class Item extends \Livewire\Component
{
public string $qs = ''; // URLのクエリ名
protected $queryString = ['qs']; // 対象の変数名を文字列で設定
public function mount()
{
var_dump( $this->qs ); // 出力
}
}
http://localhost/?qs=123456
とかにアクセスすると
string(6) "123456"
クエリqs
に渡した値をプロパティ$qs
に代入してくれます。
注意点
普通に使っていれば割と便利なこの機能ですが、残念ながら
http://localhost/?qs=123e456
とかやってしまうと123e456
が指数表記と解釈されてしまうため、上記のクエリでは↓の出力結果になってしまいます。
string(3) "INF"
ちなみにhttp://localhost/?qs=10e2
とかだと↓
string(4) "1000"
うーん、なんとも気味の悪い挙動
回避策としては「http://localhost/?qs="123e456"
でアクセスする」とか「そもそもそんな短いランダム文字列を使わない」とかが有効です。
これが原因の不具合にぶつかったときも「テストデータだしランダムなコードも6文字ぐらいで良いか」的な感じのノリだったので、今後は気を付けたい。
おまけ
Q. なんでこんなことが起こるのか?
A. なんかLivewireが受け取った値をjson_decodeに通してるから(↓の41行目)
多分バグですねこれ