【问题标题】:How to reduce the code from policy file in laravel?如何减少 laravel 中策略文件中的代码?
【发布时间】:2021-12-05 08:04:53
【问题描述】:

我有两个文件 userPolicy.phpuserObserver.php ,我在这两个文件中编写了一些逻辑,这意味着如果用户有任何活动订阅,则用户不会被删除到此为止,它工作正常。

userPolicy.php

  public function delete(User $user, $item)
    {
       $canceled_subscription=new userObserver();
       return (!$canceled_subscription->deleting($item)) && ($user->hasAdminRole());    
    }

userObserver.php

 public function deleting(Plan $item){
//based on $has_subscriptions it should allow to delete or call the userPolicy.php delete function
        $has_subscriptions=$item->subscriptions()->where('status','!=','canceled')->exists();
        return $has_subscriptions;
    }

现在我想要的是我想重构 userPolicy.php 中的代码,这意味着有没有办法减少 userPolicy.php 文件中的代码(主要是 $canceled_subscriptions),有没有机会减少代码来自 userPolicy.php 请帮我重构代码

【问题讨论】:

    标签: php laravel observers laravel-events


    【解决方案1】:

    我更喜欢通过分离条件来保持代码简洁,这样更容易快速理解。您可以在用户观察者中使用静态函数,如下例所示。

    // UserPolicy
    public function delete(User $user, $item) 
    {
        if (! $user->hasAdminRole()) return false;
    
        return UserObserver::deleting();
    }
    
    // UserObserver
    public static function deleting(Plan $item)
    {
        return $item->subscriptions()->where('status','!=','canceled')->exists();
    }
    

    【讨论】:

    • 它不起作用,观察者如何与策略进行通信
    • 这只是一个代码示例,如果没有您提供这两个类的完整代码,我将无法深入。您是否尝试过调试它,但有什么不正确的?
    猜你喜欢
    • 2020-06-15
    • 2016-08-21
    • 2020-06-16
    • 2010-12-28
    • 2016-07-24
    • 2012-06-11
    • 1970-01-01
    • 2010-11-09
    • 2022-01-23
    相关资源
    最近更新 更多