php - example - pagination lumen
Publicando JSON en Laravel (3)
Actualización: Laravel 5
Tenga en cuenta que a partir de Laravel 5.0 , la fachada de Input
se ha eliminado de la documentación oficial (y en 5.2 también se eliminó de la lista de Fachadas predeterminadas) a favor de usar directamente la clase de Request
que invoca Input
, que es Illuminate/Http/Request
.
Además, a partir de la documentation Laravel 5.1 , todas las referencias a la fachada Request
han sido eliminadas, una vez más, en lugar de utilizar la instancia Illuminate/Http/Request
directamente, que lo anima a hacer mediante la inyección de dependencia en:
... su método de controlador:
namespace App/Http/Controllers;
use Illuminate/Http/Request;
class UserController extends Controller
{
public function update(Request $request, $id)
{
$data = $request->json()->all();
}
}
... o un Cierre de ruta (a partir de 5.3 ):
use Illuminate/Http/Request;
Route::get(''/'', function (Request $request) {
$data = $request->json()->all();
});
json () y ParameterBag
Vale la pena señalar que $request->json()
devuelve una instancia de Symfony/Component/HttpFoundation/ParameterBag
, y el método ParameterBag
->all()
devuelve una matriz asociativa , y no un objeto como se esperaba OP.
Entonces, ahora uno buscará el equivalente aproximado de $_POST[''id'']
siguiente manera:
$data = $request->json()->all();
$id = $data[''id''];
Fachadas `Input` y` Request`: estado actual
Ambas fachadas se han eliminado de la documentación oficial (a partir del punto documentation ) y, sin embargo, ambas permanecen en el código fuente sin etiqueta ''en desuso''.
Como se mencionó anteriormente, Input
se eliminó como una fachada predeterminada (''alias'') en 5.2, pero a partir de 5.4, la fachada Request
permanece como predeterminada .
Esto parece implicar que todavía se puede usar la fachada de Request
para invocar métodos en la instancia de solicitud (por ejemplo, Request::json()
), pero que el uso de la inyección de dependencia es ahora simplemente el método preferido oficialmente.
Estoy tratando de hacer una solicitud de json a Laravel. Sin embargo, la solicitud se recibe en el servidor cuando intento acceder a una propiedad que obtengo: "Tratando de obtener propiedad de no objeto" . En el cliente estoy usando angularjs.
angular:
$http.post($rootScope.globals.basePath+"login/handleAjax",{"id" : obj.values[0].id,"profileUrl" : obj.values[0].publicProfileUrl}).success(function(data){
console.log("got success!",data);
});
laravel:
class LoginController extends BaseController {
/*User logs in to linkedin and sends his id through ajax to this function*/
public function handle_ajax() {
$data = Input::all();
*//Clockwork is just a debugging extension I''m using*
Clockwork::info($data->id); **//"Trying to get property of non-object".**
}
Nota: Puedo ver en Fiddler que el JSON que se envía es válido y que alcanza el método controller + (http 200).
La solicitud por sí misma (como se vio con Fiddler)
Headers:
Accept: application/json, text/plain, */*
...
Text View:
{"id":"my id","profileUrl":"http://www.linkedin.com/pub/yoel-blum/51/373/76"}
El método Input::all
Laravel devuelve una matriz asociativa, no un objeto de stdClass de PHP.
$data = Input::all();
$data[''id'']; // The ID of the request
Para expandir (y corregir) lo anterior, en Laravel 5 recuperarías JSON como se muestra:
public function handle_ajax(Request $request) {
$data = (object) $request->json()->all();
Clockwork::info($data->id);
}
En ejemplos no triviales, es posible que también desee validar su entrada primero.