From f01fdc7584190f644c037597123b5a1f60e72cb6 Mon Sep 17 00:00:00 2001 From: elinar12 Date: Wed, 5 Oct 2016 11:34:17 -0400 Subject: [PATCH] Translate file input-multiple-models.md carga multiple Yii2 --- docs/guide-es/input-multiple-models.md | 85 ++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 docs/guide-es/input-multiple-models.md diff --git a/docs/guide-es/input-multiple-models.md b/docs/guide-es/input-multiple-models.md new file mode 100644 index 0000000000..366a974600 --- /dev/null +++ b/docs/guide-es/input-multiple-models.md @@ -0,0 +1,85 @@ +Obtención de datos para los modelos de múltiples +================================ + +Cuando se trata de algunos datos complejos, es posible que puede que tenga que utilizar varios modelos diferentes para recopilar +la entrada del usuario. Por ejemplo, suponiendo que la información de inicio de sesión del usuario se almacena en la tabla `user`, +mientras que el perfil de usuario la información se almacena en la tabla `Profile`, es posible que desee para recoger los datos +de entrada sobre un usuario a través de un modelo `User` y un modelo `Profile`. Con el modelo de Yii y apoyo formulario, +puede solucionar este problema de una manera que no es mucho diferente de la manipulación de un solo modelo. + +En lo que sigue, vamos a mostrar cómo se puede crear un formulario que permitirá recoger datos tanto para los modelos `User` y +`Profile`. + +En primer lugar, la acción del controlador para la recogida de los datos del usuario y del perfil se puede escribir de la +siguiente manera, + +```php +namespace app\controllers; + +use Yii; +use yii\base\Model; +use yii\web\Controller; +use yii\web\NotFoundHttpException; +use app\models\User; +use app\models\Profile; + +class UserController extends Controller +{ + public function actionUpdate($id) + { + $user = User::findOne($id); + if (!$user) { + throw new NotFoundHttpException("The user was not found."); + } + + $profile = Profile::findOne($user->profile_id); + + if (!$profile) { + throw new NotFoundHttpException("The user has no profile."); + } + + $user->scenario = 'update'; + $profile->scenario = 'update'; + + if ($user->load(Yii::$app->request->post()) && $profile->load(Yii::$app->request->post())) { + $isValid = $user->validate(); + $isValid = $profile->validate() && $isValid; + if ($isValid) { + $user->save(false); + $profile->save(false); + return $this->redirect(['user/view', 'id' => $id]); + } + } + + return $this->render('update', [ + 'user' => $user, + 'profile' => $profile, + ]); + } +} +``` + +En la acción `update`, primero cargamos los modelos `User` y `Profile` que se actualicen desde la base de datos. Luego llamamos +[[yii\base\Model::load()]] para llenar estos dos modelos con la entrada del usuario. Si tiene éxito, se validará +los dos modelos y guardarlos. De lo contrario vamos a renderizar la vista `update` que tiene el siguiente contenido: + +```php + 'user-update-form', + 'options' => ['class' => 'form-horizontal'], +]) ?> + field($user, 'username') ?> + + ...other input fields... + + field($profile, 'website') ?> + + 'btn btn-primary']) ?> + +``` + +Como se puede ver, en el `update` vista que haría que los campos de entrada utilizando dos modelos `User` y `Profile`.