条带的处理逻辑应该在Laravel控制器中还是在验证器中?

条带的处理逻辑应该在Laravel控制器中还是在验证器中?,laravel,validation,request,rules,Laravel,Validation,Request,Rules,我是拉威尔的新来者。我有一个这样的控制器 public function buy(Request $request, User $user) { \Stripe\Stripe::setApiKey("sk_test_xxxxxxxxxxxxxxxxxxxxxxxx"); $token = $_POST['stripeToken']; $charge = \Stripe\Charge::create([ 'amount' => 100,

我是拉威尔的新来者。我有一个这样的控制器

    public function buy(Request $request, User $user) {

    \Stripe\Stripe::setApiKey("sk_test_xxxxxxxxxxxxxxxxxxxxxxxx");

    $token = $_POST['stripeToken'];

    $charge = \Stripe\Charge::create([
        'amount' => 100,
        'currency' => 'aud',
        'description' => 'Example charge',
        'source' => $token,
    ]);

    if ($charge->status === "succeeded") {
        //-- Processing... --//
    }
我想问一个更合适的设计风格,我是否应该把STTRIE的部分放在其他地方,比如验证器。 如果是,则是制定规则和请求,而不是在验证器中进行验证


有人能告诉我如何在请求中使用规则吗?

创建条带费用不是请求验证。这是对Stripe的API调用。因此,它绝对不应该留在验证器中

对于小型应用程序,您可以在控制器中使用此逻辑,但对于具有抽象功能的中/大型应用程序(例如,如果您希望以后可以选择将支付提供商从Stripe更改为Braintree),它应该位于服务类中


此外,切勿直接使用
$\u POST
。改用
$request->input
。根据经验,如果有两种方法可以在代码中执行某些操作,请始终使用实现更高级别库的方法(库>然后是框架>然后是核心PHP)。

使用Laravel 5.5编写验证+

public function buy(Request $request, User $user)
{
    // first define your rules
    $rules = [
        'amount' => 'required|numeric'
    ];

    $validatedData = $request->validate($rules);

    // The purchase is valid...
}
对于Laravel 5.0-5.4:

public function buy(Request $request, User $user)
{
    // first define your rules
    $rules = [
        'amount' => 'required|numeric'
    ];

    $validatedData = $this->validate($rules);

    // The purchase is valid...
}
在我看来,控制员的典型职责是:

  • 接受请求
  • 回复

  • 我认为进行一次条件检查或验证检查可能是好的。

    这两个地方都不是最好的地方。业务逻辑应该存在于模型或服务类中。您是否正在验证条带
    $charge
    或您的
    $request
    ?谢谢@adam。我更喜欢将逻辑划分到不同的位置,这样控制器就不会看起来太混乱。我原本以为我会自定义一个条带规则,然后在laravel的请求中使用它。