php - 自定义请求的中间件
问题描述
我创建了验证数据的请求。我需要将其中一些数据转换为 JSON。为此,我决定创建中间件。但是当我尝试在控制器中获取请求时,它没有我在中间件中添加的任何内容。这似乎是因为进入中间件的不是我自己的请求“MyRequest $request”。如何解决?
中间变量
class TransformData
{
/**
* @param $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$next($request);
$request->merge(['user_id' => \Auth::user()->id]);
$request->merge(['select_products' => json_encode($request->select_products)]);
return $request;
}
}
我的请求称为 OfferRequest,只有验证规则
控制器
class BaseController extends Controller
{
public function __construct()
{
$this->middleware('transform.offer.data')->only('store');
}
}
public function store(OfferRequest $request)
{
$all = $request->all();
dd($all); // there is nothing here that I added in the middleware
}
我将中间件添加到内核 - 受保护的 $routeMiddleware
解决方案
更新您的中间件,如下所示:
转换数据.php
class TransformData
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$request->merge([
'user_id' => \Auth::user()->id,
'select_products' => json_encode($request->select_products)
]);
return $next($request);
}
}
以上方法可行,但我建议您使用表单请求类中的prepareForValidation()
方法链接来更新请求数据。
使用prepareForValidation()
方法,您可以添加或更新您的请求参数。
OfferRequest.php
class AccountFilterRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
//your rules
}
/**
* Modify the input.
*/
public function prepareForValidation()
{
$this->merge([
'user_id' => \Auth::user()->id,
'select_products' => json_encode($request->select_products)
]);
}
}
prepareForValidation()
方法在验证之前执行,因此您可以添加新数据或更新数据并验证它们。
推荐阅读
- r - R 中带有 ggplot 的 PCA 成为基于颜色输入的 Wilkinson 点图/单位直方图
- arrays - 带有列表的数组重新分配段错误
- spring-boot-actuator - Spring Boot 执行器运行状况挂起
- android - ARCore 云锚点 - 未配置锚点托管
- jenkins - java.lang.NoSuchMethodError: 在步骤 [approveReceivedEvent,
- xamarin.forms - 如何将嵌套 BindableLayout.ItemsSource 中的项目索引绑定到 CommandParameter - Xamarin
- python - 如何制作递归增量算法?
- c# - 阅读工作簿并添加新工作表,然后使用 ClosedXML Thorw 异常“不支持指定的方法”另存为(内存流)。
- javascript - 去抖动:如果里面的变量总是真实的,它是如何工作的
- python - Python(3.9)在文件的特定行读取特定字符?