2013-11-28 2 views
-1

Я получаю неоднократную ту же ошибку. выпадающие данные не извлекаются из формы. У меня есть код здесьЗначения входных данных DROPDOWN не выбраны

это мой контроллер: ProductController

{<?php 

class ProductController extends Controller 
{ 
    public function actionCreate() 
    { 
     $model=new CreateForm; 
    // collect user input data 
     if(isset($_POST['CreateForm'])) 
     { 
      $model->attributes=$_POST['CreateForm']; 
         $model->setAttributes($_POST['CreateForm']); 
      // validate user input and redirect to the previous page if valid 
      if($model->validate()) 
         { 
         $product=new Product; 
         $product->save(); 
         } 
         else { 
          echo "Hi"; 
         } 
     } 
     // display the login form 
     $this->render('create',array('model'=>$model)); 


    } 
} 
?>} 

Моя модель: CreateForm

{<?php 

    class CreateForm extends CFormModel 
    { 
     public $product_name; 
     public $category_name; 
     public $description; 


     public function rules() 
     { 
      return array(
       array('product_name, category_name, description', 'required'), 
       array('product_name', 'unique', 'className' => 'Product', 'attributeName' => 'product_name', 'message'=>'This product name is already in use'), 
      ); 

     } 

     public function attributeLabels() 
     { 
      return array(
       'product_name'=>'PRODUCT NAME', 
         'category_name'=>'CATEGORY', 
         'description'=>'DESCRIPTION' 
      ); 
     } 



    } 
    ?> 

} 

Категория

{ 
<?php 
class Category extends CActiveRecord 
{ 
    public static function model($className=__CLASS__) 
    { 
     return parent::model($className); 
    } 
    public function tableName() 
    { 
     return 'category'; 
    } 

    public function attributeLabels() 
    { 
     return array(
      'category_id'=>'CATEGORY ID', 
        'category_name'=>'CATEGORY NAME', 

     ); 
    }  
} 
?>} 

МОЕ мнение: create.php

{<?php 
$this->pageTitle=Yii::app()->name . ' - Create'; 
$this->breadcrumbs=array(
    'Create', 
); 
?> 

<h1>CREATE</h1> 
<div class="form"> 
<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'create-form', 
    'enableAjaxValidation'=>true, 
    'enableClientValidation'=>true, 

)); 

?> 


    <p class="note">Fields with <span class="required">*</span> are required.</p> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'product_name'); ?> 
     <?php echo $form->textField($model,'product_name'); ?> 
     <?php echo $form->error($model,'product_name'); ?> 
    </div> 

    <div class="row"> 

     <?php 
      echo $form->labelEx($model,'category_name'); 
       $records = Category::model()->findAll(); 
       $list = CHtml::listData($records, 'category_id', 'category_name'); 
       echo CHtml::DropDownList('category_name', null, $list, array('prompt'=>'select ')); 
       echo $form->error($model,'category_name'); 
       ?> 

    </div> 

    <div class="row"> 
      <?php echo $form->labelEx($model,'description'); ?></br> 
     <?php echo $form->textArea($model,'description',array('style' => 'height:100px;width:500px;','maxlength'=>500)); ?> 
     <?php echo $form->error($model,'description'); ?> 
    </div> 

    <div class="row submit"> 
     <?php echo CHtml::submitButton('CREATE'); ?> 
    </div> 

<?php $this->endWidget(); ?> 
</div><!-- form --> 
} 

, если я введу все поля, снова выдает ошибку о том, «PLS ввести категорию»

+0

Вы определили безопасные атрибуты в функции правил модели? – davidfurber

+0

да добавлен. {правила государственных функций() { возврат массива ( \t \t \t массив ('product_name, category_name, описание', 'требуется'), массив ('PRODUCT_NAME', 'уникальный', 'имя класса' => 'Product' , 'attributeName' => 'product_name', 'message' => 'Это имя продукта уже используется'), \t массив ('product_name, category_name, desc', 'safe'), \t ); }} – user2702228

+0

Также есть ли DropDownList, привязанный к модели, или отправка его параметра «голый»? – davidfurber

ответ

0

То, что вы сделали, называется массовым присваиванием

$model->attributes=$_POST['CreateForm']; 

это не будет присваивать все значения и не безопасно в обращении дАННЫЕ также

дАННЫХ будет сохранено только если они находятся в безопасности в модели

вы переобъявить отправленные данные как

$model->attributes=$_POST['CreateForm']; 
$model->dropdownname=$_POST['CreateForm']['dropdownname']; 

Надеется, что это поможет вам

http://www.yiiframework.com/wiki/161/understanding-safe-validation-rules/#hh2

+0

Нет снова я получаю ту же ошибку – user2702228

0

Я думаю, что вы изменить свой код выпадающего списка.

<?php 
echo $form->labelEx($model,'category_name'); 
$records = Category::model()->findAll(); 
$list = CHtml::listData($records, 'category_id', 'category_name'); 
echo CHtml::DropDownList('category_name', null, $list, array('prompt'=>'select ')); 
echo $form->error($model,'category_name'); 
?> 

Для

<?php 
echo $form->labelEx($model,'category_name'); 
$records = Category::model()->findAll(); 
$result = array(); 
foreach($records as $p) { 
    $result[p->category_id] = p->category_name ;  
} 
echo CHtml::activeDropDownList($model, 'category_name', $result); 
echo $form->error($model,'category_name'); 
?> 

Теперь вам нужно проверить, или ваш идентификатор категории или имя подходит или нет. Затем вы отлаживаете файл своего контроллера, как показано ниже.

public function actionCreate() 
{ 
    $model=new CreateForm; 
    // collect user input data 
    if(isset($_POST['CreateForm'])) 
    { 
    $model->attributes=$_POST['CreateForm']; 

    echo $model->category_id ; 
    exit ; // Finish program here, and drop down will be printed. 

    $model->setAttributes($_POST['CreateForm']); 
    // validate user input and redirect to the previous page if valid 
    if($model->validate()) 
    { 
    $product=new Product; 
    $product->save(); 
    } 
    else { 
    echo "Hi"; 
    } 
    }  // display the login form 
    $this->render('create',array('model'=>$model)); 
} 

Надеюсь, он вам поможет.

Thanks

Смежные вопросы