【发布时间】:2017-02-23 13:16:20
【问题描述】:
我正在使用 laravel 5.2,并且我正在使用 laravel 供应商提供的表单请求来使我的代码干净,所以我的控制器上没有很多代码:
public function store( CouponRequest $request )
{
DB::beginTransaction();
try {
$coupon = Coupon::create( $request->all() );
DB::commit();
return redirect()->route('admin.coupons.index');
} catch (\Exception $e) {
DB::rollback();
return redirect()->back()->withInput();
}
这是关于我的申请表的示例代码:
public function rules()
{
switch ( strtolower( $this->method ) ) {
case 'post':
{
return [
'code' => 'required|unique:coupons,code',
'name' => 'required',
'start_year' => 'required',
'start_month' => 'required',
'start_day' => 'required',
'start_time' => 'required',
'finish_year' => 'required',
'finish_month' => 'required',
'finish_day' => 'required',
'finish_time' => 'required',
'using_time' => 'required',
'type' => 'required',
'free_shipment' => 'required',
'target' => 'required',
'target_user' => 'required'
];
}
case 'put':
{
return [
'code' => 'required',
'name' => 'required',
'start_year' => 'required',
'start_month' => 'required',
'start_day' => 'required',
'start_time' => 'required',
'finish_year' => 'required',
'finish_month' => 'required',
'finish_day' => 'required',
'finish_time' => 'required',
'using_time' => 'required',
'type' => 'required',
'free_shipment' => 'required',
'target' => 'required',
'target_user' => 'required'
];
}
default:
{
return [];
}
}
}
我应该把这个命令放在哪里? :
$start_date = Carbon::create( $request->start_year, $request->start_month, $request->start_day );
$start_date->setTimeFromTimeString( $request->start_time );
$finish_date = Carbon::create( $request->finish_year, $request->finish_month, $request->finish_day );
$finish_date->setTimeFromTimeString( $request->finish_time );
如果我在验证之前放置此代码,当某些字段没有被用户填写好时,我可能会出错。
所以我想要的是在验证成功后放置这段代码,但我不想把它放在我的控制器上。
验证成功后是否可以调用FormRequest函数来修改我的请求?
我觉得控制器代码多的时候不好,所以我想最小化我的控制器代码。
【问题讨论】:
-
你可以使用中间件
-
工作流程是这样的:中间件 -> 表单请求 -> 控制器对吧?所以如果我把我的代码放在中间件上,它不会验证
-
不要那样做。中间件提供了一种过滤进入应用程序的 HTTP 请求的机制。不转换 http 请求。你最终会得到一个令人困惑的代码库。您可以改为编写服务。这也将使您的控制器更加清洁和可靠。
-
谁在使用
$start_date和$finish_date?你是坚持还是使用它? -
@HilmiErdemKEREN 是对的,我可能误解了你的问题。您可以创建一个服务并将其注入控制器。服务容器将负责接线
标签: php laravel validation