Javascript 如何在laravel中验证X-editable请求(服务器端)

Javascript 如何在laravel中验证X-editable请求(服务器端),javascript,php,jquery,laravel,validation,Javascript,Php,Jquery,Laravel,Validation,我已经设法让x-editable()来处理一个页面,当我点击一个字段时,它会显示内联,我可以编辑它,并且我能够成功地提交到一个POST-URI 这里的想法是,我将发送三个键值对: array:3 [▼ "name" => "name" "value" => "mathematics" "pk" => "1" ] 我的update()方法捕获数组,并成功更新数据库中的记录。但我无法验证数据 这是我的控制器的外观: public function update(Re

我已经设法让x-editable()来处理一个页面,当我点击一个字段时,它会显示内联,我可以编辑它,并且我能够成功地提交到一个POST-URI

这里的想法是,我将发送三个键值对:

array:3 [▼
  "name" => "name"
  "value" => "mathematics"
  "pk" => "1"
]
我的
update()
方法捕获数组,并成功更新数据库中的记录。但我无法验证数据

这是我的控制器的外观:

 public function update(Request $request)
{
    //
    $id = $request->pk;
    $subject = Subject::findOrFail($id);

    $rules = array (
        'name' => 'bail|required|max:20|unique:subjects,name,'.$id
    );
即使我尝试失败,此验证也很容易通过

    $validator = Validator::make ( $request->all(), $rules );

    if ($validator->fails ()) {
        return response()->json ( array (

         'errors' => $validator->getMessageBag ()->toArray ()
        ) );
    } else {
        $subject->update([$request->name => $request->value]);
    }
    return response ()->json ( $subject );
 }
这就好像我没有将“正确”的请求对象传递给validate()?没有表格提交,但明确说明:

Laravel生成包含所有验证错误的JSON响应。此JSON响应将与422 HTTP状态代码一起发送

路线:

Route::post('/subjects/update/', 'SubjectsController@update');
脚本:

$('#subjects').editable({
     container:'body',
     selector:'td.name',
     type:'post',
     dataType:'JSON',
     validate:function(value){
        if ($.trim(value) === '') {
           return "Field is required";
        }
     }
});


1

如果我没有弄错的话,
name
是要编辑的字段(DB列),而
value
是值。看起来您正在更新
名称
列,因此您必须验证请求中
的唯一性,而不是“名称”

此外,我建议您使用控制器的
validate
方法(由
validateRequests
trait提供):


此处
validate
将自动拒绝,并在JSON响应中显示422代码和验证错误。如果通过,它将继续更新。(
return$subject
还返回响应中对象的JSON表示。)

如果我没有弄错的话,
name
是要编辑的字段(DB列),而
value
是值。看起来您正在更新
名称
列,因此您必须验证请求中
的唯一性,而不是“名称”

此外,我建议您使用控制器的
validate
方法(由
validateRequests
trait提供):


此处
validate
将自动拒绝,并在JSON响应中显示422代码和验证错误。如果通过,它将继续更新。(
return$subject
也会在响应中返回对象的JSON表示。)

我在理解您的问题时有点困难。您的值发送是否正确?但是验证没有“正确”运行?这是最大长度吗?主题关系?你在用什么
“试图失败”
?@Henry
名称
字段是唯一的,当我试图插入一个已经存在的名称时,它通过了验证,可能会导致内部错误。通常情况下,当我发送不带x-editable的ajax请求并尝试通过验证失败时,我会通过json返回错误消息,我会捕获并将其显示给用户。您的值发送是否正确?但是验证没有“正确”运行?这是最大长度吗?主题关系?你在用什么
“试图失败”
?@Henry
名称
字段是唯一的,当我试图插入一个已经存在的名称时,它通过了验证,可能会导致内部错误。通常,当我发送不带x-editable的ajax请求并尝试通过验证失败时,我会通过json返回错误消息,我会捕获该消息并将其显示给用户。如果控制器需要验证两(2)个字段(
name
另一个字段
)这里唯一的选择是对规则执行条件语句,对吗?@NathanSiafa是的,如果验证规则检查另一个字段的值,您也可以使用
required\u。但是,字段总是
name
value
,不是吗?@lepeino非常感谢。你花了我一点钱,但这是值得的。如果有两(2)个字段需要控制器验证(
name
另一个字段
),这里唯一的选择就是在规则上做一个条件语句,对吗?@NathanSiafa是的,你也可以使用
required\u if
验证规则来检查另一个字段的值。但是,字段总是
name
value
,不是吗?@lepeino非常感谢。你花了我一点钱,但值得。
public function update(Request $request)
{
    $id = $request->pk;
    $subject = Subject::findOrFail($id);

    $this->validate($request, [
        'name' => 'required', // this should be the column to update
        'value' => 'bail|required|max:20|unique:subjects,name,'.$id
    ];        

    $subject->update([$request->name => $request->value]);

    return $subject;
 }