¡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?