Laravel - 覆盖自定义请求的魔术 _get 方法 class

Laravel - Overwrite magic _get method for a custom Request class

我有一个自定义请求 class PersonRequest 用于导出项目,我在其中操作原始请求并创建新请求,我需要覆盖默认魔法 get请求方法

我可以调用 $request->get($key) 并且我已经在我的 PersonRequest 中覆盖了那个方法,但是:

如何覆盖 $request->key

我想你可以覆盖 PersonRequest 的构造函数并按如下方式更改密钥:

function __constructor(Request $request){
    $request->key = 'new_key'; //override the key here
}

假设您想操作请求对象的内容,您可以根据需要添加和删除键 PersonsController

public function store(PersonRequest $request)
{
    $value = $request->key;
    $request->request->remove('key');
    $request->request->add(['different' => $value]);
    dd($request->different);
}

PersonRequest

public function rules()
{
    return [
        'key' => 'required'
    ];
}

Blade View

<form action="/person" method="POST">
    @csrf
    <input type="text" name="key" value="someone">
    <button type="submit">Submit</button>
</form>

路线

Route::post('/person', 'PersonController@store');

Result

"someone"

您可以看到 here 如何 Laravel 实现它,并且通过遵循该方法的签名,您可以将自定义 __get 魔术方法放在同一个 class您放置自定义 get 方法的位置。

也许如果您提供有关您要实现的目标的更多详细信息,可能会有更简单的方法来解决问题而不是覆盖请求 class。