2013-06-29 3 views
0

Первое сообщение здесь о переполнении стека, поэтому я надеюсь, что все правильно, я искал, но не могу найти то, что искал.проблема проверки валидации cakephp?

Я новичок в cakephp и довольно новичок в php. Я смог встать и запустить вчера без проблем и отправить данные в мою базу данных. на днях я хотел работать с валидацией с помощью ajax, но я думаю, что я оставлю ajax из него на некоторое время, поскольку у меня возникла проблема с отображением ошибок проверки.

Валидация настроена для первых двух полей формы, подобных этому;

<?php 

class people extends AppModel 
{ 
    public $name = 'people'; 
    public $useTable = 'people'; 

    public $validate = array(
     'firstName'=>array(
      'rule'=>'notEmpty', 
      'message'=>'Enter You First Name' 
      ), 
     'secondName'=>array(
      'rule'=>'notEmpty', 
      'message'=>'Enter Your Second/Family Name' 
      ), 
     ); 
}?> 

и он отлично работает, если эти поля пустые, они не будут писать в базу данных до сих пор так хорошо. Однако, когда я нажимаю submit на форме, страница обновляется, сообщения об ошибках появляются под полями формы, но также добавляет совершенно новую форму в соответствии с предыдущей. вот контроллер. Примечание: функция validate_form это из CakePHP с Ajax учебнике я был следующим и закомментированного

<?php 

class peoplesController extends AppController 
{ 
    public $name = "peoples"; 
    public $helpers = array('Html', 'form', 'Js'); 
    public $components = array('RequestHandler'); 



    public function index() { 


      if($this->request->is('post')) 
      { 
       $data = $this->request->data; 
       $this->people->save($data); 


      } 

     } 

    /*public function validate_form() { 
      if ($this->RequestHandler->isAjax()) { 
       $this->data['people'][$this->params['form']['field']] = $this->params['form']['value']; 
       $this->people->set($this->data); 
       if ($this->people->validates()) { 
        $this->autoRender = FALSE; 
       } 
       else { 
        $error = $this->validateErrors($this->people); 
        $this->set('error', $error[$this->params['form']['field']]); 
       } 

     } 
    }*/ 

    } 

    ?> 

и вид. примечание: divs с отправкой id и успехом также из учебника, которое я следовал, но я не думаю, что это повлияет на эту конкретную проблему.

<div id="success"></div> 
<h2> Fill in your profile details </h2> 

    <?php 
echo $this->Form->create('people'); 

echo $this->Form->input('firstName'); 
echo $this->Form->input('secondName'); 
echo $this->Form->input('addressOne'); 
echo $this->Form->input('addressTwo'); 
echo $this->Form->input('city'); 
echo $this->Form->input('county'); 
echo $this->Form->input('country'); 
echo $this->Form->input('postCode', array(
     'label' => 'Zip Code', 
    )); 
echo $this->Form->input('dob', array(
     'label' => 'Date of birth', 
     'dateFormat' => 'DMY', 
     'minYear' => date('Y') - 70, 
     'maxYear' => date('Y') - 18, 
    )); 
echo $this->Form->input('homePhone'); 
echo $this->Form->input('mobilePhone'); 
echo $this->Form->input('email', array(
     'type' => 'email' 
    )); 

$goptions = array(1 => 'Male', 2 => 'Female'); 
$gattributes = array('legend' => false); 

echo $this->Form->radio('gender', 
    $goptions, $gattributes 
    ); 

echo $this->Form->input('weight'); 
echo $this->Form->input('height'); 

$toptions = array(1 => 'Tandem', 2 => 'Solo'); 
$tattributes = array('legend' => false); 

echo $this->Form->radio('trained', 
    $toptions, $tattributes 
    ); 

echo $this->Form->input('referedBy'); 

/*echo $this->Form->submit('submit');*/ 

echo $this->Js->submit('Send', array(

    'before'=>$this->Js->get('#sending')->effect('fadeIn'), 
    'success'=>$this->Js->get('#sending')->effect('fadeOut'), 
    'update'=>'#success' 

    )); 

echo $this->Form->end(); 
    ?> 
    <div id="sending" style="display: none; background-color: lightgreen">Sending....   </div> 

    <?php 

echo $this->Html->script(
    'validation', FALSE); 
    ?> 

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

вторая проблема заключается в том, что по какой-то причине, если я использую

echo $this->Form->submit('submit'); 

вместо

echo $this->Js->submit('send', array(
'before'=>$this->Js->get('#sending')->effect('fadeIn'), 
'success'=>$this->Js->get('sending')->effect('fadeOut'), 
'update'=>'#success')); 

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

Спасибо заранее

ответ

1

пару вещей:

1) Используйте Колпачки для названий класса. Таким образом, People, PeoplesController и т. Д.

2) Не связывайтесь с Ajax, пока не получите стандартный поток. Итак, вернитесь к $this->Form->submit('submit');.

3) Эта «требуемая» подсказка - это HTML5. Поскольку вы установите валидацию на notEmpty, Cake добавляет разметку HTML5, чтобы сделать нужное поле. Измените Form->create вызов обойти, что на данный момент (если вам нужно, но он обеспечивает клиента проверки на стороне, которая является более эффективным):

$this->Form->create('People', array('novalidate' => true)); 

See the FormHelper docs for more info on HTML5 validations

+0

Спасибо Я ценю это, причина, я не сделал использовать кепки было, потому что поля моей базы данных не были кепками, я могу предположить, что тогда не будет иметь никакого значения? – Ir1sh

+0

Нет, имена классов не связаны с полями базы данных. Имя класса модели связано с db ** таблицами **, но они всегда преобразуются в строчные. – Costa

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