des1roer
@des1roer
ученье - свет, а неученье - приятный полумрак

Yii CHtml::textField своя валидация?

полей textField нет в модели. они из другой таблицы. то есть валидацию из модели использовать не могу. но вот запросом я получаю что указано у поля в типе (float, text, int). каким образом можно проверять что вводит пользователь.
что-то вроде
(real)$value = str_replace(',','.',$value);
  • Вопрос задан
  • 306 просмотров
Решения вопроса 1
des1roer
@des1roer Автор вопроса
ученье - свет, а неученье - приятный полумрак
Не очень изящно конечно.
_form.php
echo '<div class="column">';
            echo CHtml::label($rows[$i]['name'], $rows[$i]['name']);
            echo CHtml::textField("elem[$id][val][]", $val, array('id' => $rows[$i]['name']));
            echo '</div>';
            echo '<div class="column" style="display:none">';
            echo CHtml::textField("elem[$id][type][]", $type, array('id' => $rows[$i]['name']));
            echo '</div>';

получим примерно следующий хтмл код
<div class="column">
<label for="Вагонов">Вагонов</label>
<input id="Вагонов" type="text" name="elem[5][val][]" value="">
</div>
<div class="column" style="display:none">
<input id="Вагонов" type="text" name="elem[5][type][]" value="int">
</div>


контроллер
if (isset($_POST['elem']))
                    {
                        $command = Yii::app()->db->createCommand();
                        $max = Yii::app()->db->createCommand()
                                ->select('max(id) as max')
                                ->from('a_analiz_create')
                                ->queryScalar();

                        $Ids = $_POST['elem'];
                         $cnt = max(array_keys($Ids));
                        $min = min(array_keys($Ids));
                        for($i = $min; $i <= $cnt; $i++)
                        {
                            $type = $Ids[$i]['type'][0];
                            $val = $Ids[$i]['val'][0];
                            if ($type == 'float')
                            {
                                (real)$val = str_replace(',','.',$val);                                 
                            }
                            else if ($type == 'int')
                            {
                                $val = (int)$val;                                 
                            }   
                            if (isset($val) && !empty($val))
                                $command->insert('a_analiz_data', array(
                                    'analiz_id' => $max, 
                                    'value' => $val,
                                    'elem_id' => $i,
                                    'user_id' => Yii::app()->user->id,
                                ));
                        }
                    };
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@matperez
Если нужно валидировать в форме поле из другой модели, можно завести фейковое поле, его и валидировать.
При создании формы загружать в него данные из другой модели, при сохранении формы, после валидации, выгружать из фейквого поля данные в нужную модель.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы