让 Laravel 返回 JSON

Posted

技术标签:

【中文标题】让 Laravel 返回 JSON【英文标题】:Get Laravel to return JSON 【发布时间】:2016-09-04 18:17:16 【问题描述】:

您好,我正在努力以 JSON 格式获取经过验证的错误消息。我不知道为什么在 laravel 中很难做到这一点。我正在尝试使用 ajax 请求来获取包含表单数据错误的 HTTP 响应。这是我的请求代码

<?php

    namespace App\Http\Requests;

    use App\Http\Requests\Request;

    use Auth;

    use Log;


    class PostRequest extends Request
    
        /**
         * Determine if the user is authorized to make $this request.
         *
         * @return bool
         */
        public function authorize()
        
            return true;
        

        /**
         * Get the validation $rules that apply to the request.
         *
         * @return array
         */

    public function wantsJson()
        
            return true;
        

    public function response(array $errors) 
         

            if ($this->ajax())
           
                return new JsonResponse($errors, 422);
           
           return $this->redirector->to($this->getRedirectUrl())
                                        ->withInput($this->except($this->dontFlash))
                                        ->withErrors($errors);
    

    public function rules() 

      $rules = [];

      foreach($this->request->get('address') as $key => $val) 

        $rules['address.'.$key] = 'required';

      


     foreach($this->request->get('city') as $key => $val) 

        $rules['city.'.$key] = 'required';

      
  return $rules;
   


 public function messages() 


  foreach($this->request->get('address') as $key => $val) 


    $messages['address.'.$key.'.required']="*Please fill in the address";

           

        foreach($this->request->get('city') as $key => $val) 


             $messages['city.'.$key.'.required']="*Please fill in the city";

          
          return  $messages;

          

                

这是我的控制器代码

  namespace App\Http\Controllers;

  use Illuminate\Http\Request;

  use App\Http\Requests;

  use App\Http\Requests\PostRequest;

  use Auth;

  class propContoller extends Controller 


     public function __construct() 

           $this->middleware('auth');
     


     public function main ()  

             $amount = Auth::user()->units;   // pull amount of units from data base and create forms 

           return view("myprop",compact("amount"));
     

     public function Postdata(PostRequest $request) 





      
  

还有我的ajax请求

$("#from").submit(function(event) 

$.ajax(
  type: 'post',
  url: '/myproperties/save',
  data:  '_token': token, 'data': "good" ,
  dataType: 'json',
  success: function(data)
  console.log(data);
  ,
  error: function(data)
    var errors = data.responseJSON;
    console.log(errors);
    // Render the errors with js ...
  

);

和我的 html

       <div  class="form-group col-md-6">


                <div  class= "col-md-6  form-group  $errors->has('address.'.$i) ? ' has-error' : '' ">

            <label for=$id = "Address".$i>Address</label>
              <input  value=" old('address.'.$i) " type="text"  name="address[$i]" class="form-control" id=$id = "Address".$i placeholder="Street Address">


              @if ($errors->has('address.'.$i))
                          <span class="help-block">
                          <strong> $errors->first('address.'.$i) </strong>
                              </span>
                 @endif

                </div>

<div  class="col-md-6 form-group  $errors->has('city.'.$i) ? ' has-error' : '' ">

           <label for=$id = "city".$i>City</label>
            <input value=" old('city.'.$i) " type="text"  name="city[$i]"  class="form-control" id=$id = "City".$i placeholder="City">

             @if ($errors->has('city.'.$i))
                       <span class="help-block">
                           <strong> $errors->first('city.'.$i) </strong>
                            </span>
                        @endif
                  </div>

有人请帮助我是 laravel 的菜鸟,所以请放轻松

谢谢!

【问题讨论】:

你的问题解决了吗? 【参考方案1】:

你错了。在 Laravel 中创建 JSON 响应非常容易,以便以后您的前端玩具可以使用它。

public function getSomethingById(string $id)

    $data = $this->fooRepository
        ->getSomething($id)
        ->pluck('name', 'id')
        ->toArray(); // you don't have to use repository, you can use Eloquent directly here, or DB facade or even hardcode the array.

    return response()->json([
        'count' => count($data),
        'data' => $data // or whatever
    ]);

无论您需要什么,只要记住 response()-&gt;json() 需要一个数组。 Laravel 将返回具有正确 mime 类型的 JSON 响应。

然后你可以使用 jQuery 来$.get()你的 AJAX 资源等。

【讨论】:

【参考方案2】:

这就是你返回 json 的方式,在 laravel 中它真的很容易

if($request->ajax())
    return response()->json($something);

else

//return View or whatever

【讨论】:

以上是关于让 Laravel 返回 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.6:升级 composer.json 后调用未定义的方法 ...\Store::getToken()

从数据库中检索数据并在 json laravel 4 中打印它们

file_put_contents 不适用于 json laravel 和 php

让 Laravel 返回 JSON

如何让 Laravel 返回 JSON REST API 的自定义错误

Laravel 功能测试总是返回 404