ejemplo yii2-laravel para traerme datos en formato json
Wed Aug 20 2025 17:21:47 GMT+0000 (Coordinated Universal Time)
convertir una tabla postgres en json en yii2:
<?php
namespace app\controllers;
use yii\web\Controller;
use yii\web\Response;
use app\models\Libro; // Suponiendo que tienes un modelo Libro
class LibroController extends Controller
{
public function actionLista()
{
// Obtener datos como array usando asArray()
$libros = Libro::find()->asArray()->all();
\Yii::$app->response->format = Response::FORMAT_JSON;
// Devolver los datos directamente como JSON
return $libros;
}
}
convertir una tabla postgres en json en laravel:
<?php
namespace App\Http\Controllers;
use App\Models\Libro;
use Illuminate\Http\JsonResponse;
class LibroController extends Controller
{
public function lista(): JsonResponse
{
// Obtener todos los registros como array
$libros = Libro::all();
// Devolver los datos como JSON
return response()->json($libros);
}
}
Cómo definir la ruta para acceder a este método (en routes/web.php o routes/api.php):
use App\Http\Controllers\LibroController;
Route::get('/libro/lista', [LibroController::class, 'lista']);
javascript:
1. Con promesas (.then)
Cómo consumirlo con JavaScript sería igual que en Yii2-laravel:
fetch('/libro/lista')
.then(response => response.json())
.then(data => {
data.forEach(libro => {
console.log(libro.titulo);
});
});
2. Con async/await (más legible)
Cómo consumirlo en JavaScript sería igual que en Yii2-laravel:
async function obtenerLibros() {
try {
const response = await fetch('/libro/lista');
const data = await response.json();
data.forEach(libro => {
console.log(libro.titulo);
});
} catch (error) {
console.error('Error:', error);
}
}
obtenerLibros();
3. Con callback (usando XMLHttpRequest)
Cómo consumirlo en JavaScript sería igual que en Yii2-laravel:
function obtenerLibrosConCallback(callback) {
const xhr = new XMLHttpRequest();
xhr.open('GET', '/libro/lista');
xhr.onload = function() {
if (xhr.status === 200) {
const data = JSON.parse(xhr.responseText);
callback(null, data);
} else {
callback(new Error('Error en la solicitud: ' + xhr.status));
}
};
xhr.onerror = function() {
callback(new Error('Error de red'));
};
xhr.send();
}
// Usando la función con callback
obtenerLibrosConCallback(function(error, data) {
if (error) {
console.error(error);
} else {
data.forEach(libro => {
console.log(libro.titulo);
});
}
});
jquery:
1.-Ejemplo usando $.getJSON()
<!DOCTYPE html>
<html>
<head>
<title>Consumir API con jQuery</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<ul id="lista-libros"></ul>
<script>
$(document).ready(function() {
$.getJSON('/libro/lista')
.done(function(data) {
// data es un array de objetos libros
$.each(data, function(index, libro) {
$('#lista-libros').append('<li>' + libro.titulo + '</li>');
});
})
.fail(function(jqxhr, textStatus, error) {
console.error('Error al consumir la API:', textStatus, error);
});
});
</script>
</body>
</html>
2.-Ejemplo usando $.ajax():
$.ajax({
url: '/libro/lista',
type: 'GET',
dataType: 'json',
success: function(data) {
data.forEach(function(libro) {
console.log(libro.titulo);
});
},
error: function(jqxhr, textStatus, error) {
console.error('Error:', error);
}
});
laravel:
use Illuminate\Support\Facades\Http;
$response = Http::get('https://api.example.com/data');
if ($response->successful()) {
$data = $response->json(); // decodifica JSON automáticamente a array
// procesar $data
} else {
// manejar error
}
yii2:
Formas comunes de consumir APIs en PHP / Yii2:
1. Usar cURL directamente (funciona en cualquier PHP)
use yii\httpclient\Client;
$client = new Client();
$response = $client->get('https://api.ejemplo.com/data')->send();
if ($response->isOk) {
$data = $response->getData(); // Obtienes array o json decodificado automáticamente
}
2. Usar la clase yii\httpclient\Client que trae Yii2 (más moderno y elegante)
use yii\httpclient\Client;
$client = new Client();
$response = $client->get('https://api.ejemplo.com/data')->send();
if ($response->isOk) {
$data = $response->getData(); // Obtienes array o json decodificado automáticamente
}



Comments