Comment changer la réaction en Laravel?

J'ai un service RESTful, Disponible pour les points finaux.

Par exemple, je demande
api/main

Et obtenir JSON Données de serveur.

Pour répondre, j'utilise:


return response//->json/["categories" => $categories]/;


Comment gérer le format de paramètre de transfert de réponse URL?

Par exemple, j'ai besoin de ce qui suit:
api/main?format=json|html

, qu'il travaillera pour tout le monde
response

dans les contrôleurs.
Invité:

Francois

Confirmation de:

Vous pouvez utiliser pour cela.
https://laravel.com/docs/5.4/r ... acros
. Par exemple, dans la méthode
AppServiceProvider

inside
boot

vous pouvez ajouter:


\Response::macro/'custom', function/$view, $data/ {
if /\Request::input/'format'/ == 'json'/ {
return response//->json/$data/;
}
return view/$view, $data/;
}/;


Et dans votre contrôleur, vous pouvez l'utiliser maintenant:


$data = [
'key' => 'value',
];

return response//->custom/'your.view', $data/;


Si vous exécutez maintenant, par exemple,
GET /categories

, Vous obtiendrez une page normale. HTML, Mais si vous courez
GET /categories?format=json

, Vous recevrez la réponse Json. Toutefois, en fonction de vos besoins, vous devrez peut-être le configurer beaucoup plus pour le traitement, par exemple, également des redirections.

Edmond

Confirmation de:

Une des options serait utilisée pour cela
Middleware

. Dans l'exemple ci-dessous, on suppose que vous reviendrez toujours
view/'...', [/* some data */]/

.

Ce qui sera fait ci-dessous est de vérifier s'il devrait y avoir un format
json

, Et si oui, alors obtenez les données insérées dans la présentation de la réponse et les retournez simplement à la place. Ensuite, vous appliquez simplement ce logiciel intermédiaire aux itinéraires pouvant être retournés.
json

et
html

.


public function handle/$request, Closure $next/
{
$response = $next/$request/;

if /$request->input/'format'/ == 'json'/ {

$response->setContent/
$this->getDataFromResponse/$response/
/;

}

return $response;
}

/**
* Get the data that was pasted to the view
*
* @param \Illuminate\Http\Response $response
*/
protected function getDataFromResponse/$response/
{
$content = $response->getOriginalContent//;

return $content->getData//;
}


J'espère que cela aidera!

Fabien

Confirmation de:

Avec votre exemple du paramètre de requête
format

Le code du contrôleur ressemblera à quelque chose comme ceci:


public function main/Request $request/
{
$data = [
'categories' => /* ... */
];

if /$request->input/'format'/ === 'json'/ {
return response//->json/data/;
}

return view/'main', $data/;
}


Alternativement, vous pouvez simplement vérifier si la demande entrante est appelée AJAX de l'autre côté
$request->input/'format'/ === 'json'

de
https://github.com/laravel/fra ... -L221

Pour répondre aux questions, connectez-vous ou registre