¡Excelente pregunta! Es fundamental entender cómo funciona el "mago detrás de la cortina". Te lo explico paso a paso:
El Flujo Completo del Formulario
1. Vista (Formulario) → Controlador
php
<?php
// Esto genera un formulario HTML que apunta al controlador actual
$form = ActiveForm::begin([
'action' => ['libro/crear'], // ← ¡AQUÍ ESTÁ LA CLAVE!
'method' => 'post'
]);
?>
Esto genera HTML como:
html
<form action="/index.php?r=libro/crear" method="post">
<input type="text" name="Libro[titulo]" value="">
<input type="text" name="Libro[autor_id]" value="">
<!-- ... otros campos -->
</form>
2. Controlador - Donde la Magia Ocurre
php
public function actionCrear()
{
$model = new Libro();
// ¡ESTA LÍNEA ES LA CLAVE!
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// Aquí se guarda en la base de datos
if ($model->save()) {
Yii::$app->session->setFlash('success', '¡Libro guardado!');
return $this->redirect(['crear']);
}
}
return $this->render('crear', ['model' => $model]);
}
Desglosemos el Proceso Mágico:
Paso 1: $model->load() - Recoge los Datos
php
// Esto hace automáticamente:
$postData = Yii::$app->request->post();
// $postData contiene: ['Libro' => ['titulo' => 'Mi libro', 'autor_id' => 1, ...]]
$model->titulo = $postData['Libro']['titulo'];
$model->autor_id = $postData['Libro']['autor_id'];
// ... y así con todos los campos
Paso 2: $model->validate() - Valida los Datos
php
// Usa las reglas que definiste en el modelo
public function rules()
{
return [
[['titulo', 'autor_id'], 'required'], // ← Se validan aquí
[['titulo'], 'string', 'max' => 255],
];
}
Paso 3: $model->save() - Guarda en la BD
php
// Internamente hace:
public function save()
{
if ($this->validate()) {
// Genera y ejecuta el INSERT SQL automáticamente
// INSERT INTO libros (titulo, autor_id, ...) VALUES ('Mi libro', 1, ...)
return $this->insert(false);
}
return false;
}
Versión Visual del Flujo:
text
FORMULARIO HTML
↓ (envía POST)
CONTROLADOR actionCrear()
↓
$model->load() ← Recoge datos del formulario
↓
$model->validate() ← Verifica reglas
↓
$model->save() ← INSERT en la base de datos
↓
REDIRIGE o MUESTRA ERROR
Ejemplo Práctico para Entender Mejor:
Tu Formulario Genera Esto:
html
<input type="text" name="Libro[titulo]" value="Cien años de soledad">
<input type="number" name="Libro[autor_id]" value="1">
El Controlador Recibe Esto:
php
// Yii::$app->request->post() contiene:
[
'Libro' => [
'titulo' => 'Cien años de soledad',
'autor_id' => '1',
'categoria_id' => '2',
// ...
]
]
Y $model->load() Transforma Esto:
php
// Convierte automáticamente:
$model->titulo = 'Cien años de soledad';
$model->autor_id = 1;
$model->categoria_id = 2;
// ...
¿Cómo Sabe Dónde Guardar?
El Modelo Sabe Su Tabla:
php
class Libro extends ActiveRecord
{
public static function tableName()
{
return 'libros'; // ← ¡Sabe que guarda en la tabla 'libros'!
}
}
ActiveRecord Genera el SQL:
php
// Automáticamente crea:
INSERT INTO libros (titulo, autor_id, categoria_id, ...)
VALUES ('Cien años de soledad', 1, 2, ...)
En Resumen:
El formulario envía datos al controlador via POST
$model->load() mapea los datos del formulario al modelo
$model->validate() verifica que todo esté correcto
$model->save() genera y ejecuta el INSERT automáticamente
La magia está en que Yii2 hace todo el trabajo pesado por ti: no necesitas escribir SQL, no necesitas mapear campos manualmente, todo es automático y seguro.
¿Quieres que profundice en alguna parte específica?
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter