2015-09-04 7 views
1

У меня есть запрос AJAX, исходящий с моей страницы оформления, в которой пользователь вводит код купона. Это переходит в мой контроллер, как так:Как я могу подтвердить купон в Laravel 5.1?

public function attachCoupon(AttachCouponRequest $request) 
{   
    $response = ShopHelper::checkCoupon($request->coupon); 

    return Response::json($response); 
} 

функция My «checkCoupon» загружается в из вспомогательного класса и выглядит так:

public static function checkCoupon($code) 
{ 
    $coupon = Coupon::where('code',$code)->get(); 

    if ($coupon->isEmpty()) { 
     $response = ['valid' => false, 'message' => 'Coupon code not recognised']; 
    } elseif (isset($coupon->end_date) && $coupon->end_date < Carbon::now()) { 
     $response = ['valid' => false, 'message' => 'Sorry, that coupon has expired.']; 
    } elseif (isset($coupon->start_date) && $coupon->start_date > Carbon::now()) { 
     $response = ['valid' => false, 'message' => 'Sorry, that coupon is not yet valid.']; 
    } elseif (isset($coupon->status) && $coupon->status === 'inactive') { 
     $response = ['valid' => false, 'message' => 'Sorry, that coupon is inactive.']; 
    } else { 
     $response = ['valid' => true, 'message' => 'Coupon applied successfully!.']; 
    } 

    return($response); 
} 

Это, кажется, очень не-Laravel типа, является есть более аккуратный способ сделать это? Могу ли я поместить это в мой класс FormRequest 'AttachCouponRequest'? Должен ли я использовать поставщика услуг?

Пожалуйста, помогите мне сделать это более элегантным.

спасибо.

ответ

1

В настоящий момент вы вызываете get() с Eloquent, но имя метода указывает, что вы просто проверяете, действительно ли он действительный купон.

Итак, почему бы не изменить запрос, чтобы применить фильтры к самому купону и вернуть общий ответ с успехом/неудачей?

Например:

$coupon = Coupon::where('code',$code) 
    ->where('end_date', '>=', Carbon::now()) 
    ->where('start_date', '<=', Carbon::now()) 
    ->where('status', '!=', 'inactive') 
    ->count(); 

if (! $count) { 
    return ['valid' => false, 'message' => 'Sorry, that coupon is not valid.']; 
} 

return ['valid' => true, 'message' => 'Coupon applied successfully!']; 

Затем можно использовать областей запроса, так что вы могли бы сделать что-то подобное, чтобы улучшить читаемость:

$coupon = Coupon::where('code', $code)->onlyActive()->get(); 
+0

Ах, что имеет смысл. Полностью забыл области запросов. Я сделаю это для моей модели для быстрой и простой справки. –