2011-01-24 66 views
4

私はURLフィールドを持つフォームを持っています。このフィールドのデフォルト値は、http://です。しかし、このフィールドは必須ではありません。ユーザーはスキップしてフォームを送信できます。必須ではないため、URLを入力しなかったため、エラーは返されません。しかし、今はhttp://のためにそうしています。CakePHPでbeforeValidate()を使用するにはどうすればよいですか?

beforeValidate()を使用してhttp://であることを確認してから、URLフィールドを消去してエラーメッセージをスキップできるようになったと聞きました。

しかし、beforeValidate()の使用方法はわかりません。私はGoogleを検索しましたが、実際の例は見つかりませんでした。 beforeValidate()のコードはどこに置くのですか?それは機能ですか?そこから送信されたフォームデータにどのようにアクセスすればよいですか?

ありがとうございました。

+0

を許可するために、次を使用しますエラーはどういう意味ですか? –

+0

検証エラーメッセージ "URL is not valid"を返します。フォームがサブミットされた後、検証の前にhttp://をクリアする必要があるので、cakephpはフィールドを空白としてスキップします。 – codemonkey613

+2

あなたの前の質問を参照してください:http://stackoverflow.com/questions/4783872/cakephp-how-do-i-validate-url-but-ignore-if-http-or-blank – harpax

答えて

6

はい、beforeValidate()はモデルの関数です。だから、すべてのモデルがそれを持っています。どのようにそれを使用する必要があります。

class YourModel extends AppModel { 
    function beforeValidate(){ 
     if($this->data['YourModel']['url_field'] == 'http://'){ 
     unset($this->data['YourModel']['url_field']); 
     } 
     return true; //this is required, otherwise validation will always fail 
    } 
} 
+1

ではなく、varをunsetよりも空白に設定しますそれはバリデーションルールで必要となるかもしれません。 – harpax

2

代わりにハードコーディングのhttp://フォームに、URLの適切な検証を追加し、空白

「allowEmpty」=>真

関連する問題