2013-04-04 23 views
8

Khi tôi đang phát triển trong Laravel4 Beta3, tôi đã sử dụng để nhận dữ liệu JSON POST từ một dịch vụ sử dụng chức năng Input :: json(), nhưng khi tôi cập nhật Laravel4 Beta4, tôi nhận được lỗi sau:Những thay đổi về Input :: json() giữa Laravel 4 beta3 và beta4

Notice: Undefined tài sản: Symfony \ Component \ HttpFoundation \ ParameterBag :: $ productName phù /Applications/MAMP/htdocs/commonDBAPI/app/controllers/UserController.php 47

Có ai có bất kỳ ý tưởng nào, nguyên nhân có thể là gì không.

Cảm ơn,

Trả lời

15

Bạn có thể truy cập chỉ là JSON sử dụng Input::json()->all().

Nhập liệu JSON cũng được hợp nhất thành Input::all() (và Input::get('key', 'default')) để bạn có thể sử dụng cùng một giao diện để nhận dữ liệu Chuỗi truy vấn, Dữ liệu biểu mẫu và tải trọng JSON.

Tài liệu chưa phản ánh tất cả thay đổi vì Laravel 4 vẫn đang trong giai đoạn thử nghiệm và trọng tâm là nhận mã đúng, tài liệu sẽ được cập nhật sẵn sàng cho bản phát hành công khai.


JSON được hợp nhất với Input :: all() như thế nào?

Hãy xem xét các JSON sau:

{ 
    'name': 'Phill Sparks', 
    'location': 'England', 
    'skills': [ 
     'PHP', 
     'MySQL', 
     'Laravel' 
    ], 
    'jobs': [ 
     { 
      'org': 'Laravel', 
      'role': 'Quality Team', 
      'since': 2012 
     } 
    ] 
} 

Khi sáp nhập vào đầu vào Laravel của JSON được giải mã, và các phím top-level trở thành chìa khóa cấp cao nhất trong các đầu vào. Ví dụ:

Input::get('name'); // string 
Input::get('skills'); // array 
Input::get('jobs.0'); // object 
Input::all(); // Full structure of JSON, plus other input 
+0

Sử dụng Input :: json() -> all() là thẳng về phía trước và hữu ích, nhưng làm thế nào có thể sử dụng Input :: all() để lấy JSON? – Sameer

+0

Đầu vào :: all() đại diện cho tất cả đầu vào được gửi đến tập lệnh của bạn (tức là chuỗi truy vấn, dữ liệu biểu mẫu và tải trọng JSON). Vì vậy, trong một câu trả lời bạn không thể nhận được * chỉ * JSON từ 'Input :: all()'. Bạn vẫn có thể sử dụng 'Input :: get ('key', 'default')' để lấy một khóa riêng. –

+0

ok. Nhưng không có keyname nào được gán cho tải trọng JSON, vậy làm thế nào để sử dụng Input :: get for that? – Sameer

0

Yup họ đã thay đổi nó để trả về một đối tượng ParameterBag chuyển mã của bạn để Input :: json() -> tất cả()

+0

Trong tài liệu chính thức, Taylor chưa đề cập đến Input :: json() -> all(). Vì vậy, nó có thể được rằng, họ sẽ thay đổi điều này cũng? Vui lòng tìm câu lệnh dưới đây từ tài liệu chính thức: ** Một số thư viện JavaScript như Backbone có thể gửi đầu vào cho ứng dụng dưới dạng JSON. Bạn có thể truy cập dữ liệu này qua Input :: như bình thường. ** – Sameer

0

Mục đích: { "tên": "Olivier", "title": "Chỉ cần một thử" }

Hãy thử điều này:

$ input = Input :: json() -> tất cả();

trả lại $ input ['name'];

Các vấn đề liên quan