elinar12
8 years ago
committed by
GitHub
1 changed files with 85 additions and 0 deletions
@ -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 |
||||||
|
<?php |
||||||
|
use yii\helpers\Html; |
||||||
|
use yii\widgets\ActiveForm; |
||||||
|
|
||||||
|
$form = ActiveForm::begin([ |
||||||
|
'id' => 'user-update-form', |
||||||
|
'options' => ['class' => 'form-horizontal'], |
||||||
|
]) ?> |
||||||
|
<?= $form->field($user, 'username') ?> |
||||||
|
|
||||||
|
...other input fields... |
||||||
|
|
||||||
|
<?= $form->field($profile, 'website') ?> |
||||||
|
|
||||||
|
<?= Html::submitButton('Update', ['class' => 'btn btn-primary']) ?> |
||||||
|
<?php ActiveForm::end() ?> |
||||||
|
``` |
||||||
|
|
||||||
|
Como se puede ver, en el `update` vista que haría que los campos de entrada utilizando dos modelos `User` y `Profile`. |
Loading…
Reference in new issue