metodo example collective php angularjs laravel

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.