在 Route 声明中使用 withTrashed 方法并在模型中使用 resolveRouteBinding 时自定义模型绑定

Custom model binding when using withTrashed method on Route declaration and resolveRouteBinding in Model

我在路由上的隐式模型绑定遇到问题软删除模型 .使用 withTrashed 方法时,不会调用 Model 中的 resolveRouteBinding 方法。当从 路由声明 中删除 withTrashed 方法时,将按预期调用方法 resolveRouteBinding

重现步骤:

routes/web.php

Route::get('user/{user}', function(SoftDeletedModel $user) {
    dd($user);
})->withTrashed(); //withTrashed is used

Models/SoftDeletedModel.php

use SoftDeletes;

public function resolveRouteBinding($value, $field = null) {
    dd("Successfully Substituted Bindings when using WithTrashed."); //This is not displayed.
    return parent::resolveRouteBinding($value, $field);
}

这是已知错误还是我哪里出错了? 在 github

上也存在一个 issue

您需要使用此方法 resolveSoftDeletableRouteBinding 而不是 resolveRouteBinding

    /**
     * Retrieve the model for a bound value.
     *
     * @param mixed $value
     * @param string|null $field
     *
     * @return \Illuminate\Database\Eloquent\Model|null
     */
    public function resolveSoftDeletableRouteBinding($value, $field = null)
    {
        
         return parent::resolveSoftDeletableRouteBinding($value, $field);
    }

由于 Laravel v8.55.0withTrashed() 支持路由:

Route::post('/user/{user}', function (ImplicitBindingModel $user) {
    return $user;
})->middleware(['web'])->withTrashed();