Laravel 4传递异常变量

时间:2014-01-29 21:44:37

标签: php laravel scope

我对尝试抛出异常时收到的错误感到困惑,Undefined variable: validation

这是我第一次尝试创建自定义异常,而且我一定是做错了。在这里,我只是想验证插入到数据库中的行(哪个有效),我遇到的问题是异常。

控制器

public function store()
{
    try
    {
        $this->deals->insertDeal(Input::all());
    }

    catch(ValidationError $e)
    {
        return Redirect::route('deals.create')
        ->withInput()
//this is the unknown variable
        ->withErrors($validation->errors);
    }

    return Redirect::route('deals.create')
            ->with('message', 'Deal Created');
}

模型

public function insertDeal($input)
{
    $validation = new Services\Validators\Deal;

    if ($validation->passes()) {

        $deals = Deals::create($input);
    }

    $errors = $validation->errors;
    throw new ValidationError($validation->errors);
}

自定义验证错误

class ValidationError extends Exception {}

App::error(function(ValidationError $e){

});

总结一下,我只是不确定为什么我在尝试触发异常时会收到未定义变量的错误。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

基本上,$validation方法范围内不提供store()。您可以通过重写ValidationError类来传递错误:

class ValidationError extends Exception
{
     protected $errors;

     public function __construct($errors)
     {
         $this->errors = $errors;
     }

     public function getErrors()
     {
         return $this->errors;
     }
}

并访问store()中的错误:

public function store()
{
    try {
        $this->deals->insertDeal(Input::all());
    } catch(ValidationError $e) {
        return Redirect::route('deals.create')
          ->withInput()
          ->withErrors($e->getErrors());
    }

    return Redirect::route('deals.create')
            ->with('message', 'Deal Created');
}