我创建了验证数据的请求。我需要将其中一些数据转换为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
答案 0 :(得分:0)
按如下所示更新您的中间件:
TransformData.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()
方法link来更新请求数据。
使用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()
方法在验证之前执行,因此您可以添加新数据或更新数据并进行验证。