public function actionCreate()
{
$model=new Fio;
$phone = new Phone;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Fio'], $_POST['Phone']))
{
$model->attributes=$_POST['Fio']; // сначало сохраняем fio
// $model->Street_ID=6;
$model->Street_ID = $_POST['Street_ID']; // затем говорим ему что Street_ID нужно брать из Street_ID которое обьявлено в DynamicStreets методе
$phone->attributes=$_POST['Phone'];
//$phone->Type_ID=2;
//$phone->FIO_ID = $model -> $_POST['ID'];
if(($model->save())){
$phone->FIO_ID = $model-> ID;
if ($phone->save())
$this->redirect(array('view', 'id' => $model->ID));
}
}
$this->redirect(array('index'));
}
<div class="row">
<?PHP echo CHtml::form();
$data = CHtml::listData(Town::model()->findAll(), 'ID', 'Town'); // первое поле, тут запрашивается город и его id
echo CHtml::dropDownList('ID', '',$data,
array(
'prompt'=>'Select Region',
'ajax' => array(
'type'=>'POST',
'url'=>Yii::app()->createUrl('Fio/dynamicStreets'), //ссылка на метод в контроллере
'update'=>'#Street_ID', //тэг для второго поля
'data'=>array('ID'=>'js:this.value'),
)));
echo CHtml::dropDownList('Street_ID','', array(), array('prompt'=>'Select City'));?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'Surname'); ?>
<?php echo $form->textArea($model,'Surname',array('rows'=>1, 'cols'=>40)); ?>
<?php echo $form->error($model,'Surname'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'Patronymic'); ?>
<?php echo $form->textArea($model,'Patronymic',array('rows'=>1, 'cols'=>40)); ?>
<?php echo $form->error($model,'Patronymic'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'Name'); ?>
<?php echo $form->textArea($model,'Name',array('rows'=>1, 'cols'=>40)); ?>
<?php echo $form->error($model,'Name'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'Building'); ?>
<?php echo $form->textField($model,'Building'); ?>
<?php echo $form->error($model,'Building'); ?>
</div>
<div>
<?php echo $form->labelEx($phone,'Number'); ?>
<?php echo $form->textArea($phone,'Number',array('rows'=>1, 'cols'=>40)); ?>
<?php echo $form->error($phone,'Number'); ?>
</div>
<div>
<?php echo $form->labelEx($phone,'Type_ID'); ?>
<?php echo $form->dropDownList($phone,'Type_ID', CHtml ::listData(Type::model()->findAll(), 'ID','Type_Phone')); ?>
<?php echo $form->error($phone,'Type_ID'); ?>
</div>
<?php $this->renderPartial('_form', array('model'=>$model,
// 'phone'=>$phone
)); ?>
он ругается на $phone, этот редер в update view, такой же рендер прописан в index, там он без проблем принимается. Когда пытаешся перейти на update с этим кодом он пишет что $phone из формы <div>
<?php echo $form->labelEx($phone,'Number'); ?>
<?php echo $form->textArea($phone,'Number',array('rows'=>1, 'cols'=>40)); ?>
<?php echo $form->error($phone,'Number'); ?>
</div>
protected function populatePhoneForFioID($fioId, $phones) // получаем значения
{
if (!empty($phones)) { // проверяем нif (!empty($phones)) { // проверяем не пустое ли phone
$numbers = $phones['Number']; // обьявляем значения
$types = $phones['Type_ID'];
if (sizeof($numbers) === sizeof($types)) { //проверям размер обьектов number and type
foreach ($types as $key => $type) { // перебираем types ключ значение
if (isset($numbers[$key]) && !empty($numbers[$key])) {// если number не пустой и key не пустой
if ($this->isPhoneForUpdate($key, $phones['ID'])) { // это обновление то обращаемся к методу
$phone = Phone::model()->findByPk($key);// ищем эти значения в модели
} else { // обновляем
$phone = new Phone;
}
$phone->FIO_ID = $fioId;
$phone->Type_ID = $type;
$phone->Number = $numbers[$key];
$phone->save();
}
}
} else {
throw new CHttpException("Data size mismatch", 0);
}
}
}
protected function populateCreateNumber($fioId, $phones)
{
if (!empty($phones)) {
$numbers = $phones['Number'];
$types = $phones['Type_ID'];
if (sizeof($numbers) === sizeof($types)) {
foreach ($types as $key => $type) {
if (isset($numbers[$key]) && !empty($numbers[$key])) {
$phone = new Phone;
$phone->FIO_ID = $fioId;
$phone->Type_ID = $type;
$phone->Number = $numbers[$key];
$phone->save();
}
}
} else {
throw new CHttpException("Data size mismatch", 0);
}
}
}
/**
* Creates a new model.
* If creation is successful, the browser will be redirected to the 'view' page.
*/
public function actionCreate()
{
$model = new Fio;
$phone = new Phone;
// Uncomment the following line if AJAX validation is needed
$this->performAjaxValidation($model);
if (isset($_POST['Fio']) && isset($_POST['Phone'])) {
$model->attributes = $_POST['Fio']; // присваиваем все отрибуты model Fio
$model->Street_ID = $_POST['Street_ID']; // затем говорим ему что Street_ID нужно брать из Street_ID которое обьявлено в DynamicStreets методе
if ($model->save()) {
$this->populateCreateNumber($model->ID, $_POST['Phone']);
$this->redirect(array('view', 'id' => $model->ID));
}
}
$this->redirect(array('index'));
}