2015-08-28 46 views
0

我想在laravel 5中执行自定义验证,这里是概念。我有一个类别控制器,我想删除一个特定的类别。如果类别包含任何其他子类别,我想在laravel 5中显示验证错误。对于此概念,我创建了该程序,但该程序不执行所需的验证。我得到各种错误,如未找到可变值或未验证未执行或未定义变量:struct。以下是我用来做这件事的代码。Laravel 5如何在Controller中执行验证以检查数据收集中的特定数据

CategroyController destroy function, to delete record. 

public function destroy(Request $request) 
    { 
     if(\Request::ajax()){ 
      $validator = \Validator::make($request->all(), array()); 
      $data = Configuration::findTreeParent($request->input('id'), 'Category'); 
      $selected = $request->input('id'); 
      foreach($data as $struct) { 
       $validator->after(function($validator) { 
        if ($selected == $struct->id) { 
         $validator->errors()->add('field', $request->input('configname').' cannot be assigned to its child category.'); 
        } 
       }); 
      } 
      if ($validator->fails()) { 
       return $validator->errors()->all(); 
      } else{ 
       return \Response::json(['response' => 200,'msg' => $validator->fails()]); 
      } 
     } 
    } 

请看看并帮我解决这个问题。

回答

0

当使用closure时,在使用它之前,您需要将一个变量传递给它的scope。在你的情况下,$struct在你关闭的范围内不可用$validator->after()

所以基本上你必须通过$struct关闭。

// you can remove this line. $selected = $request->input('id'); 
$validator->after(function($validator) use ($struct) { 
    if ($request->input('id') == $struct->id) { 
     $validator->errors()->add('field', $request->input('configname').' cannot be assigned to its child category.'); 
    } 
}); 

要返回验证错误的JSON响应,请更新以下代码。

if ($validator->fails()) { 
    return \Response::json($validator->errors()->all(), 422); 
} 

阅读关于封闭here

+0

这是工作,但结果是作为状态代码200返回。它应该返回为ajax错误。 –

+0

因为你在回应中传递了200个状态码。将它更新为422. 422状态码是验证的正确验证码。 – Subash

+0

不,我没有通过任何状态代码。你可以检查以上。我只是简单地检查验证是否失败。如果失败返回所有错误,否则返回json输出。 –

相关问题