【问题标题】:Should processing logic of STRIPE be in the Laravel controller or in the validator?STRIPE 的处理逻辑应该在 Laravel 控制器中还是在验证器中?
【发布时间】:2019-04-16 10:48:16
【问题描述】:

我是 laravel 的新手。我有一个像这样的控制器 ProductController

    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的部分放到其他地方,比如validator。 如果是,是不是在validator中验证,而是制定规则和请求?

谁能告诉我如何在请求中使用规则?

【问题讨论】:

  • 这两个地方都不是最适合它的地方。业务逻辑应该存在于模型或服务类中。
  • 您是在验证条带$charge 还是您的$request

标签: laravel validation request rules


【解决方案1】:

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

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

另外,切勿直接使用$_POST。请改用$request->input。作为一个经验法则,如果您有两种方法可以在代码中做某事,请始终使用实现更高级别库的方式(库 > 然后是框架 > 然后是核心 PHP)。

【讨论】:

    【解决方案2】:

    使用 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...
    }
    

    我认为控制器的典型职责:

    1. 接受请求
    2. 返回响应

    我认为进行一项条件或验证检查可能没问题。

    【讨论】:

    • 谢谢@adam。我更喜欢将逻辑分离到不同的地方,这样控制器就不会显得太乱。本来想自定义一条STRIPE规则,然后在laravel的请求中使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2016-04-22
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    相关资源
    最近更新 更多