проверка не работает в торт PHP, если получить данные из другой модели - PullRequest
0 голосов
/ 28 февраля 2012

у меня есть таблица "car_types", контроллер users_controller, модель Car_type и URL-адрес действия

localhost/carsdirectory/users/dashboard

dashboard.ctp (вид)

 <?php echo $this->Form->create('Users', array('type' => 'file', 'action' => 'dashboard')); ?>
 <select>
 <?php foreach($car_type as $key => $val) { ?>
 <option value="" selected="selected">select</option>
 <option value="<?php echo $val['Car_type']['id']; ?>">
 <?php echo $val['Car_type']['car_type']; ?>
 </option>
 <?php } ?>
 </select>
 <?php echo $this->Form->end(array('label' => 'Submit', 'name' => 'Submit', 'div' => array('class' => 'ls-submit')));?>

Car_type.php (модель)

 class Car_type extends AppModel
   {
   var $name = 'Car_type';

   var $validate = array(

   'car_type' => array(

       'rule' =>'notEmpty',
       'message' => 'Plz select type.'
         )
     ); 
    }

users_controller.php (контроллер)

  public function dashboard(){

      $this->loadModel('Car_type'); // your Model name => Car_type

      $this->set('car_type', $this->Car_type->find('all'));

   }

но когда я нажимаю кнопку "Отправить", я хочу показать сообщение (выберите тип PLZ), и сейчас он не работает. Я знаю, что у меня есть проблема в моем коде, и я не могу разобраться, поэтому PLZ поможет мне

заранее спасибо, викас тяги

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Это правило проверки предназначено для проверки, когда вы добавляете какой-либо тип автомобиля, а не пользователя.

Для этого вам нужно включить проверку в поле Модель пользователя из поля car_type_id:

class User extends AppModel {
    var $name = 'User';

    var $validate = array(
        'car_type_id' => array(
            'rule' => 'notEmpty',
            'message' => 'Please, select car type.'
        )
    );
}

И вашФорма:

$this->Form->input('car_type_id', array('options' => $car_type, 'empty' => '- select -'));

Ваш контроллер может быть просто:

$this->set('car_type', $this->User->Car_type->find('all'));

Однако, не знаете, если это весь ваш код, чтобы подтвердить правильность отношений между этими двумя моделями.

0 голосов
/ 28 февраля 2012

Учитывая, что это данные, вы должны сохранить список допустимых вариантов выбора в модели.

var $carType= array('a' => 'Honda', 'b' => 'Toyota', 'c' => 'Ford');

Вы можете получить эту переменную в контроллере просто так:

$this->set('fieldAbcs', $this->MyModel->carType);

К сожалению, вы не можете просто использовать эту переменную в объявлении правила для правила inList, поскольку правила объявляются как переменные экземпляра и могут быть инициализированы только статически (переменные не допускаются). Лучший способ обойти это - установить переменную в конструкторе:

var $validate = array(
    'carType' => array(
        'allowedChoice' => array(
            'rule' => array('inList', array()),
            'message' => 'Pls select type.'
        )
    )
);

function __construct($id = false, $table = null, $ds = null) {
    parent::__construct($id, $table, $ds);

    $this->validate['carType']['allowedChoice']['rule'][1] =
    array_keys($this->fieldAbcChoices);
}
...