0

スタック オーバーフローに関する最初の投稿です。正しく行うことを願っています。検索しましたが、探しているものが見つかりません。

私はcakephpが初めてで、phpもかなり初めてです。昨日は問題なく起動して実行でき、データベースにデータを送信できました。今日、私は ajax を使用した検証に取り組みたいと思っていましたが、検証エラーの表示に問題があるため、しばらく ajax を除外しようと思います。

次のように、最初の 2 つのフォーム フィールドに対して検証が設定されます。

<?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'
            ),
        );
}?>

これらのフィールドが空の場合、これまでのところデータベースに書き込むことはできません。ただし、ページが更新されたフォームで送信を押すと、フォーム フィールドの下にエラー メッセージが表示されますが、前のフォームの下にまったく新しいフォームが追加されます。ここにコントローラーがあります。注:validate_form関数は、私がフォローしていたajaxチュートリアルを使用したcakephpからのもので、コメントアウトされています

<?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']]);
                }

        }
    }*/

    }

    ?>

とビュー。注:ID送信と成功のdivも、私がフォローしていたチュートリアルからのものですが、この特定の問題に影響を与えるとは思いません。

    <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); 
     ?>

そのため、同じページに2番目の同一のフォームを作成することが私の主な問題です。コントローラーが最初のフォームを取得して同じビューに送り返すことに関係していると思いますが、これをトラブルシューティングする方法がわかりません。

2番目の問題は、何らかの理由で使用すると

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の問題であると確信していますが、ブルベが表示されないようにトラブルシューティングする方法がわかりません代わりに、必要なエラーメッセージが表示されます

前もって感謝します

4

1 に答える 1

1

いくつかのこと:

1) クラス名に大文字を使用します。などPeople_ PeoplesController_

2) 標準フローが機能するようになるまで、Ajax をいじらないでください。に戻り$this->Form->submit('submit');ます。

3) その「必須」ツールチップは HTML5 です。検証を に設定したためnotEmpty、Cake は HTML5 マークアップを追加してフィールドを必須にします。今のところそれをバイパスするように呼び出しを変更しますForm->create(必要な場合は、より効率的なクライアント側の検証を提供します):

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

HTML5 検証の詳細については、FormHelper のドキュメントを参照してください。

于 2013-06-29T21:37:18.807 に答える