如何将自定义错误消息从模型传递到控制器Laravel


How to pass custom error messages from Model to Controller Laravel

好的,所以我现在有这个控制器,它基本上检索一个模型并进行一些计算。

原始代码有很多计算量,但为了简单起见,这是一个精简版。

到目前为止,我想将所有逻辑移到模型中,并在它下面构建了代码,但不知道如何将自定义消息传递给控制器。

我是Laravel的初学者,所以我试图以一种易于理解的方式实现这一点,这样我就可以维护它,并设法使下面的代码正常工作,但不会将自定义错误消息传递到控制器上。

你能给我一个如何将自定义错误消息传递给控制器的示例代码吗

这是控制器中的原始代码。

Controller
public function getDetail()
{
    $request = Model::where('id','=',8)->first();
    if($request)
    {
        if($request->number >= 5)
        {
            return Redirect::back()->withMessage('You have 5 or more');
        }
        if($request->number > 0 && $request->number < 5)
        {
            return Redirect::back()->withMessage('You have between 1 and 4');
        }
        if($request->number <= 0)
        {
            return Redirect::back()->withErrors('You do not have enough points');
        }       
    }
    else
    {
        return Redirect::back()->withErrors('No details found');
    }
}

这是我试图构建的将逻辑移动到模型的新代码,但不知道如何传递自定义错误消息?

Model 
Class Profile
{
    private $model
    function __construct() 
    {     
            $this->model = Model::where('id','=',8)->first();
    }   
    public function Notification()
    {
        if($this->model->number >=5)
        {
            return true;
        }
        if($this->model->number > 0 && $this->model->number < 5)
        {
            return true;
        }
        if($this->model->number <=0)
        {
            return false;
        }
    }
}

Controller
public function getDetail()
{
    $request = new Profile;
    $result = $request->Notification();
    if($result)
    {
        return Redirect::back()->withMessage(????????);
    }
    else
    {
        return Redirect::back()->withErrors(????????);
    }
}

只需从Model函数返回消息,并在控制器中使用它即可返回,如下所示。

模型函数

public function Notification()
{
    $returnArray = array();
    if($this->model->number >=5)
    {
        $returnArray['isMessage'] = true;
        $returnArray['message'] = "You have 5 or more";
    }
    if($this->model->number > 0 && $this->model->number < 5)
    {
        $returnArray['isMessage'] = true;
        $returnArray['message'] = "You have between 1 and 4";
    }
    if($this->model->number <=0)
    {
        $returnArray['isError'] = true;
        $returnArray['error'] = "You do not have enough points";
    }
    return $returnArray;
}

控制器功能

public function getDetail()
{
    $request = new Profile;
    $result = $request->Notification();
    if(isset($result['isMessage']) && $result['isMessage'] == true)
    {
        return Redirect::back()->withMessage($result['message']);
    }
    else if (isset($result['isError']) && $result['isError'] == true)
    {
        return Redirect::back()->withErrors($result['error']);
    }
}

理想情况下,您不应该在控制器中创建Model对象。您可以在模型中创建一个函数作为静态方法,然后从控制器中调用它。