【问题标题】:Laravel Nova – Manually Send Error Alert From Observer ClassLaravel Nova – 从观察者类手动发送错误警报
【发布时间】:2019-04-30 02:49:41
【问题描述】:

我有一个带有名为 active. 的字段的季节资源模型

要求禁用删除处于活动状态的season

我为季节模型创建了一个观察者来观察删除事件。通过这个函数,如果active 为真,我可以阻止删除。

但问题在于错误消息;有什么方法可以从 Observer 类向会话闪存添加错误消息?

<?php

public function deleting(Season $season)
{
    if($season->active_season)
    {
        Log::info('Sorry, this season can`t be deleted. 
            There must be at least one active season.');
    }

    return false;
}

【问题讨论】:

    标签: laravel observers laravel-nova


    【解决方案1】:

    您可以使用Exception 类。我在 Nova 操作中对其进行了测试,它会抛出 toast 错误通知。

    use Exception;
    
    throw new Exception('Error message here ...');
    
    // Or
    
    throw_if(
        $validator->fails(), // or any true boolean
        Exception::class,
        'Error message here ...'
    );
    
    

    【讨论】:

    • 在生产环境中使用时会出现服务器错误。
    • @MuhammadSulman 有什么错误?给我看看你的代码。
    • 无论如何,我通过使用自定义异常类解决了,因为默认异常返回500错误代码,我只是覆盖它并使用500系列的任何其他代码,然后它显示我的自定义错误信息。否则,它不会显示我的自定义错误消息,只显示“服务器错误”,这是外行用户无法接受的。
    【解决方案2】:

    我不知道如何显示错误消息。

    但由于要求是禁用状态为活动的季节的删除,我建议使用policy,它不会在不匹配条件时显示删除图标。

    class SeasonPolicy {
        ...
    
        public function delete(User $user, Season $season) {
            if($season->active_season) {
                return false;
            }
            return true;
        }
    }
    

    并在AuthServiceProvider注册政策。

    注意:

    未定义的策略方法

    如果存在策略但缺少特定操作的方法, 将不允许用户执行该操作。所以,如果你有 定义了一个策略,不要忘记定义所有相关的 授权方式。

    【讨论】:

      【解决方案3】:

      这未经测试,但我能够在之前的项目中实现类似的效果:

      use Illuminate\Validation\ValidationException;
      
      class AbcObserver
      {
          public function creating(Abc $abc)
          {
              if ($abc->details != 'test') {
                  throw ValidationException::withMessages(['details' => 'This is not valid.']);
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-28
        • 2021-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        相关资源
        最近更新 更多