如何将自定义错误消息从Model传递给Controller Laravel

时间:2015-03-24 17:34:25

标签: php laravel-4 model controller

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

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

我想将所有逻辑移到模型中,并且到目前为止已在其下面构建了代码,但无法弄清楚如何将自定义消息传递给Controller。

我是Laravel的初学者,所以试图以一种易于理解的方式实现这一点,以便我可以维护它并设法让下面的代码工作,但没有将自定义错误消息传递给Controller。

您能给我一个示例代码,说明如何将自定义错误消息传递给控制器​​

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

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(????????);
    }

}

1 个答案:

答案 0 :(得分:1)

只需从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的对象。您可以在模型中创建函数作为静态方法,并从控制器中调用它。