symfony データ検証メソッド分析例、symfony サンプル分析_PHP チュートリアル
symfony データ検証方法の分析例、symfony の分析例
この記事の例では、Symfony データ検証方法について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
検証は、Web アプリケーションの一般的なタスクです。フォームに入力されたデータは検証される必要があります。データは、データベースに書き込まれる前、または Web サービスに渡されるときにも検証する必要があります。
Symfony2 には Validator コンポーネントが装備されており、検証作業をシンプルかつ理解しやすくします。このコンポーネントは、JSR303 Bean 検証仕様に基づいています。 PHP で使用するための Java 仕様。
基本的な検証
検証を理解する最良の方法は、検証がどのように実行されるかを確認することです。まず、アプリケーションのどこかで使用される PHP オブジェクトを作成したと仮定します。
名前空間 AcmeBlogBundleEntity;
クラス作成者
{
パブリック $name;
}
ここまでは、アプリケーション内で何らかの目的を果たす単なる通常のクラスです。検証の目的は、オブジェクトのデータが合法かどうかを判断することです。この目的のために、ルールまたは制約のリストに従ってオブジェクトを構成し、そのデータを合法にする必要があります。これらのルールは、さまざまな形式 (YAML、XML、クラス宣言、PHP など) で記述できます。たとえば、属性 $name を空にすることはできないので、次のルールを追加します:
YAML形式:
AcmeBlogBundleEntity作成者:
プロパティ:
名前:
- NotBlank: ~
クラス宣言の形式:
SymfonyComponentValidatorConstraints をアサートとして使用します;
クラス作成者
{
/**
* @AssertNotBlank()
*/
パブリック $name;
}
XML形式:
xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
<クラス名="AcmeBlogBundleEntityAuthor">
<プロパティ名="名前">
&lt;制約名= "notblank" /&gt;
クラス>
PHP コード形式:
SymfonyComponentValidatorMappingClassMetadataを使用します;
SymfonyComponentValidatorConstraintsNotBlank を使用します;
クラス作成者
{
パブリック $name;
パブリック静的関数loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('name', new NotBlank());
}
}
保護されたプライベート属性とゲッター メソッドも検証できます。
バリデーターサービスを使用する:
次に、バリデーターサービスの validate メソッドを使用して、Author オブジェクトを実際に検証します。バリデーターの仕事は単純です。クラスの制約ルールを読み取り、オブジェクトのデータがこれらのルール制約に準拠しているかどうかを検証します。検証が失敗した場合は、エラー配列が返されます。次に、コントローラーで実行します:
AcmeBlogBundleEntityAuthor を使用します;
//...
パブリック関数indexAction()
{
$author = 新しい著者();
//... $auother オブジェクトをどうするか
$validator = $this->get('validator');
$errors = $validator->validate($author);
if(count($errors) >0){
新しい応答を返します(print_r($errors, true));
}その他{
新しい応答を返します('著者は有効です! はい!');
}
}
$name 属性が空の場合、次のエラー メッセージが表示されます:
AcmeBlogBundle作者名:
この値は空白であってはなりません
$name 属性の値を挿入すると、成功を示すメッセージが表示されます。
ほとんどの場合、バリデーターサービスと直接通信する必要はなく、印刷エラーについて心配する必要もまったくありません。
ほとんどの場合、送信されたフォーム データを処理するときに間接的に検証を使用します。
エラー メッセージのコレクションをテンプレートに渡すこともできます:
Return $this->render('AcmeBlogBundle:Author:validate.html.twig',array(
) 'エラー' => $errors,
));
}その他{
//...
}
テンプレートでは、必要に応じて正確にエラー リストを出力できます。
小枝形式:
作成者には次のエラーがあります
- {{ エラー.メッセージ }}
{% エラー中のエラー %}
{% 終了用 %}
チェックサムフォーム
バリデーター サービスを使用すると、いつでもオブジェクトを検証できます。 実際、フォームを処理するときに間接的にバリデーターを使用することがよくあります。 Symfony のフォーム ライブラリは、データが送信されてバインドされた後、間接的にバリデーター サービスを使用して、基礎となるオブジェクトを検証します。オブジェクト制約違反情報は FieldError オブジェクトに変換され、フォームに簡単に表示できます。コントローラーでの従来のフォーム送信プロセスは次のとおりです:
AcmeBlogBundleFormAuthorType を使用します;
AcmeComponentHttpFoundationRequest を使用します;
//...
パブリック関数 updateAction(Request $request)
{
$author = 新しい AcmeBlogBundleEntityAuthor();
$form = $this->createForm(new AuthorType(),$author);
if($request->getMethod() =='POST'){
$form->bindRequest($request);
If($form->isvalid()){
// $author
に対していくつかの操作を実行します
return $this->redirect($this->generateUrl('...'));
}
}
return $this->render('BlogBundle:Author:form.html.twig',array(
)
'フォーム' => $form->createView(),
));
}
構成:
Symfony2 のバリデーターはデフォルトで利用可能です。ただし、life メソッドを使用して制約を指定する場合は、宣言関数を明示的に有効にする必要があります:
YAML形式:
フレームワーク:
検証: {enable_annotations: true }
XML形式:
<フレームワーク:構成>
PHP コード形式:
$contianer->loadFromExtension('framework',array('validation'=> array(
) 'enable_annotations'=>true,
)));
制約ルール
Validator は、制約ルールに従ってオブジェクトを検証するように設計されています。オブジェクトを検証するには、検証対象のクラスに 1 つ以上の制約をマップし、それを検証サービスに渡すだけです。
本質的に、制約は決定ステートメントを生成する単純な PHP オブジェクトです。 現実の世界では、制約は「ケーキを焼くことができない」などのルール制約になる可能性があります。 Symfony2 では、制約はすべて同じです。制約は特定の条件が true であるかどうかを決定します。値を指定すると、その値が制約ルールに従っているかどうかが制約によってわかります。
Symfony2 でサポートされる制約ルール
まず、基本的な制約ルールです。オブジェクトのプロパティの値やメソッドの戻り値など、非常に基本的なものを決定するために使用します。
NotBlank、Blank、NotNull、Null、True、False、Type
文字列制約: Email、MinLength、MaxLength、Url、Regex、Ip など
数値制約: 最大、最小
日付の制約: 日付、日時、時刻
コレクションの制約: 選択、コレクション、UniqueEntity、言語、ロケール、国など。
ファイルの制約: ファイル、画像
その他の制約: コールバック、すべて、有効
独自のカスタム制約を作成することもできます。
制約構成:
NotBlank などの一部の制約は非常に単純ですが、Choice 制約などの他の制約には設定が必要な構成項目が多数あります。 Author クラスに別の属性があると仮定すると、gener を「男性」または「女性」に設定できます:
YAML形式:
AcmeBlogBundleEntity作成者:
プロパティ:
ジェネレーター:
- 選択肢: { 選択肢: [男性、女性]、メッセージ: 有効な性別を選択してください。 クラス宣言の形式:
クラス作成者 {
/**
* @AssertChoice(
* 選択肢 = {"男性","女性"},
* メッセージ = 「有効な性別を選択してください。」
*)
*/
公開 $gender;
}
xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
<クラス名="AcmeBlogBundleEntityAuthor"> <プロパティ名="性別">
で
& Lt; オプション名 = "メッセージ" & gt; 値の性別を選択します。
クラス>
PHP コード形式:
コードをコピーします
SymfonyComponentValidatorMappingClassMetadata を使用します;
SymfonyComponentValidatorConstraintsNotBlank を使用します;
クラス作成者
{
公開 $gender;
パブリック静的関数loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('gender', new Choice(array(
)
'選択' => array('男性', '女性'),
'メッセージ' => '有効な性別を選択してください。',
)));
}
}
制約オプションは通常、配列を介して渡されます。一部の制約では、値を渡すこともできます。 「default」は配列ではオプションです。選択制約を使用する場合、選択肢オプションはこの方法で指定できます。
YAML形式:
AcmeBlogBundleEntity作成者:
プロパティ:
性別:
- 選択肢: [男性、女性]
クラス宣言の形式:
SymfonyComponentValidatorConstraints をアサートとして使用します;
クラス作成者
{
/**
* @AssertChoice({"男性", "女性"})
*/
保護された $gender;
}
XML形式:
xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
<クラス名="AcmeBlogBundleEntityAuthor">
<プロパティ名="性別">
<制約名="選択">
クラス>
PHP形式:
コードをコピーします
クラス作成者
{ 保護された $gender;
パブリック静的関数loadValidatorMetadata(ClassMetadata $metadata)
{
}
}
制約はクラスプロパティまたはパブリックゲッターメソッドに適用できます。属性制約は最も一般的に使用され、最も単純ですが、パブリック ゲッター メソッド制約を使用すると、複雑な制約ルールを指定できます。
属性制約:
検証クラスのプロパティは、最も一般的な検証手法の 1 つです。 Symfony2 を使用すると、プライベート、保護された、またはパブリックのプロパティを検証できます。次のコードは、Author オブジェクトの $firstName プロパティを少なくとも 3 文字を持つように構成する方法を示しています。 YAML形式:
コードをコピーします
AcmeBlogBundleEntity作成者:
プロパティ:
名:
- NotBlank: ~
- MinLength: 3
クラス宣言の形式:
SymfonyComponentValidatorConstraints をアサートとして使用します;
クラス作成者
{
/**
* @AssertNotBlank()
* @AssertMinLength(3)
*/
プライベート $firstName;
}
XML形式:
<クラス名="AcmeBlogBundleEntityAuthor">
<プロパティ名="firstName">
<制約名="NotBlank" />
<制約名="MinLength">3制約>
クラス>
PHP コード形式:
SymfonyComponentValidatorMappingClassMetadata を使用します;
SymfonyComponentValidatorConstraintsNotBlank を使用します;
SymfonyComponentValidatorConstraintsMinLength を使用します;
クラス作成者
{
プライベート $firstName;
パブリック静的関数loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('firstName', new NotBlank());
$metadata->addPropertyConstraint('firstName', new MinLength(3));
}
}
ゲッターズ
制約はメソッドの戻り値にも適用できます。 Symfony2 では、「get」または「is」で始まるパブリック メソッドに制約を追加できます。この手法の利点は、オブジェクトを動的に検証できることです。たとえば、パスワード フィールドがユーザーの名と一致しないことを確認したいとします (セキュリティ上の理由から)。これを行うには、idPasswordLegal メソッドを作成し、このメソッドが true を返す必要があると判断します:
YAML形式:
AcmeBlogBundleEntity作成者:
ゲッター:
パスワード法的事項:
- "True": { メッセージ: "パスワードはあなたの名と一致しません" }
クラス宣言の形式:
SymfonyComponentValidatorConstraints をアサートとして使用します;
クラス作成者
{
/**
* @AssertTrue(メッセージ = "パスワードはあなたの名と一致しません")
*/
パブリック関数 isPasswordLegal()
{
// true または false を返します
}
}
XML形式:
<クラス名="AcmeBlogBundleEntityAuthor">
<制約名="True">
クラス>
SymfonyComponentValidatorMappingClassMetadata を使用します;
SymfonyComponentValidatorConstraintsTrue を使用します;
クラス作成者
{
パブリック静的関数loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addGetterConstraint('passwordLegal', new True(array(
)
'message' => 'パスワードはあなたの名と一致しません',
)));
}
}
次に、isPasswordLegal() メソッドを作成し、必要なロジックを含めます。
{
Return ($this->名 != $this->パスワード);
}
目の肥えた人は、ゲッターのプレフィックス (「get」または「is」) がマッピング時に無視されることに気づくかもしれません。これにより、検証ルールを変更せずに、制約を同じ名前のプロパティに移動したり、その逆に移動したりすることができます。
カテゴリー:
いくつかの制約は検証対象のクラス全体に適用されます。たとえば、コールバック制約は、クラス自体に適用できる一般的な制約です。クラスが検証されると、制約によって記述されたメソッドが単純に実行されるため、それぞれがよりパーソナライズされた検証を提供できます。
検証グループ化
これまでのところ、クラスに制約を追加し、クラスが定義されたすべての制約ルールに合格したかどうかを確認することができました。場合によっては、クラスのルールの一部を使用してオブジェクトを検証するだけで済みます。これを行うには、各制約を 1 つ以上の検証グループに編成し、アプリケーションで検証グループの 1 つを使用します。たとえば、ユーザーが登録するときと連絡先情報を更新するときに使用される User クラスがあるとします。
YAML形式:
AcmeBlogBundleEntityUser:
プロパティ:
メール:
- メール: { グループ: [登録] }
パスワード:
- NotBlank: { グループ: [登録] }
- MinLength: { 制限: 7、グループ: [登録] }
市:
- MinLength: 2
クラス宣言の形式:
名前空間 AcmeBlogBundleEntity;
SymfonyComponentSecurityCoreUserUserInterfaceを使用します;
SymfonyComponentValidatorConstraints をアサートとして使用します;
ユーザーが UserInterface を実装するクラス
{
/**
* @AssertEmail(groups={"登録"})
*/
プライベート $email;
/**
* @AssertNotBlank(グループ={"登録"})
* @AssertMinLength(limit=7, groups={"登録"})
*/
プライベート $パスワード;
/**
* @AssertMinLength(2)
*/
プライベート $city;
}
XML形式:
<クラス名="AcmeBlogBundleEntityUser">
<プロパティ名="電子メール">
<制約名="電子メール">
<オプション名="グループ">
オプション>
制約>
<プロパティ名="パスワード">
<制約名="NotBlank">
<オプション名="グループ">
オプション>
制約>
<制約名="MinLength">
<オプション名="制限">7オプション>
<オプション名="グループ">
オプション>
制約>
<プロパティ名="都市">
<制約名="MinLength">7制約>
クラス>
PHP代格格式:
名前空間 AcmeBlogBundleEntity;
SymfonyComponentValidatorMappingClassMetadataを使用します;
SymfonyComponentValidatorConstraintsEmail を使用します;
SymfonyComponentValidatorConstraintsNotBlank を使用します;
SymfonyComponentValidatorConstraintsMinLength を使用します;
クラスユーザー
{
パブリック静的関数loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('email', new Email(array(
)
'グループ' => array('登録')
)));
$metadata->addPropertyConstraint('パスワード', new NotBlank(array(
)
'グループ' => array('登録')
)));
$metadata->addPropertyConstraint('パスワード', new MinLength(array(
)
'制限' => 7、
'グループ' => array('登録')
)));
$metadata->addPropertyConstraint('city', new MinLength(3));
}
}
这里我们配置了两个校验组:
デフォルトの承認グループ: どのグループにも割り当てられていないすべての制限承認が含まれます
登録: メールアドレスとパスワードの文字列のみが含まれる学校验规则
告発validator は指定された校验組を使用し、1 つまたは複数の組の代表作は validate() メソッドの 2 番目のパラメータです。
値と配列の検証
これまで、オブジェクト全体を検証する方法について見てきました。ただし、文字列が正当な電子メール アドレスであるかどうかを確認するなど、単一の値を確認したい場合もあります。これは非常に簡単で、次のようにコントローラー クラスで実行されます:
SymfonyComponentValidatorConstraintsEmail を使用します;
パブリック関数 addEmailAction($email)
{
$emailConstraint = 新しいメール();
// すべての検証オプションは次のように設定できます
$emailConstraint->message = '無効なメール アドレス';
// バリデーターを使用して値を検証します
$errorList = $this->get('validator')->validateValue($email, $emailConstraint);
if (count($errorList) == 0) {
// これは正当なメール アドレスです。何ができるでしょうか
} その他 {
// これは不正なメールアドレスです
$errorMessage = $errorList[0]->getMessage()
// エラー処理を実行します
}
// ...
}
バリデーターの validateValue メソッドを呼び出すことで、生の値と使用する検証オブジェクトを渡すことができます。このメソッドは、エラー メッセージの配列の役割のみを担う ConstraintViolationList オブジェクトを返します。コレクション内の各エラーは ConstraintViolation オブジェクトであり、エラー情報はオブジェクトの getMessage メソッドを使用して取得できます。
概要:
Symfony2 のバリデーターは、あらゆるオブジェクト データの有効性を確認するために使用できる強力なツールです。その威力は、オブジェクトのプロパティとゲッター メソッドに適用できる制約ルールから得られます。実際、フォームを使用する場合、ほとんどの場合、検証フレームワークは間接的に使用され、任意のオブジェクトを検証するためにどこにでも適用できることに注意してください。
この記事で説明した内容が皆さんの Symfony フレームワーク プログラミングに役立つことを願っています。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











WeChat は主流のチャット ツールの 1 つであり、WeChat を通じて新しい友人に出会ったり、古い友人に連絡したり、友人間の友情を維持したりすることができます。永遠に終わらない宴会など存在しないように、人間同士が仲良くなれば必ず意見の相違が生じます。ある人があなたの気分に極度に影響を与える場合、または仲良くなったときに意見が一致しないことがわかり、コミュニケーションが取れなくなった場合、WeChat の友人を削除する必要がある場合があります。 WeChatの友達を削除するにはどうすればよいですか? WeChat友達を削除する最初のステップ:WeChatメインインターフェースで[アドレス帳]をタップします; 2番目のステップ:削除したい友達をクリックして[詳細]を入力します; 3番目のステップ:上部の[...]をクリックします右隅; ステップ 4: 下の [削除] をクリックします; ステップ 5: ページのプロンプトを理解した後、[連絡先を削除] をクリックします;

トマト ノベルは非常に人気のある小説閲覧ソフトウェアです。トマト ノベルでは、新しい小説や漫画を読むことができます。どの小説も漫画もとても面白いです。小説を書きたい友達もたくさんいます。お小遣いを稼いで、小説の内容を編集することもできます。 「テキストに文章を書きたいです。それで、小説はどうやって書くのですか?友達は知らないので、一緒にこのサイトに行きましょう。小説の書き方の入門を少し見てみましょう。」 Tomato Novels を使用して小説を書く方法に関するチュートリアルを共有します。 1. まず、携帯電話で Tomato Free Novels アプリを開き、パーソナル センター - ライター センターをクリックします。 2. Tomato Writer Assistant ページに移動し、次の場所で [新しい本の作成] をクリックします。小説の終わり

Colorful マザーボードは中国国内市場で高い人気と市場シェアを誇っていますが、Colorful マザーボードのユーザーの中には、設定のために BIOS を入力する方法がまだ分からない人もいます。この状況に対応して、編集者はカラフルなマザーボード BIOS に入る 2 つの方法を特別に提供しました。ぜひ試してみてください。方法 1: U ディスク起動ショートカット キーを使用して、U ディスク インストール システムに直接入ります。ワンクリックで U ディスクを起動する Colorful マザーボードのショートカット キーは ESC または F11 です。まず、Black Shark インストール マスターを使用して、Black Shark インストール マスターを作成します。 Shark U ディスク起動ディスクを選択し、コンピュータの電源を入れます。起動画面が表示されたら、キーボードの ESC キーまたは F11 キーを押し続けて、起動項目を順次選択するウィンドウに入ります。「USB」の場所にカーソルを移動します。 」と表示され、その後

残念ながら、WeChat は広く使用されているソーシャル ソフトウェアであり、何らかの理由で特定の連絡先を誤って削除してしまうことがよくあります。ユーザーがこの問題を解決できるように、この記事では、削除された連絡先を簡単な方法で取得する方法を紹介します。 1. WeChat の連絡先削除メカニズムを理解します。これにより、削除された連絡先を取得できるようになります。WeChat の連絡先削除メカニズムでは、連絡先がアドレス帳から削除されますが、完全には削除されません。 2. WeChat の組み込みの「連絡先帳復元」機能を使用します。WeChat には、この機能を通じて以前に削除した連絡先をすばやく復元できる「連絡先帳復元」機能が用意されています。 3. WeChat 設定ページに入り、右下隅をクリックし、WeChat アプリケーション「Me」を開き、右上隅にある設定アイコンをクリックして設定ページに入ります。

携帯電話が人々の日常生活において重要なツールになるにつれて、フォント サイズの設定は重要なパーソナライゼーション要件になりました。さまざまなユーザーのニーズを満たすために、この記事では、簡単な操作で携帯電話の使用体験を向上させ、携帯電話のフォントサイズを調整する方法を紹介します。携帯電話のフォント サイズを調整する必要があるのはなぜですか - フォント サイズを調整すると、テキストがより鮮明で読みやすくなります - さまざまな年齢のユーザーの読書ニーズに適しています - フォント サイズを使用すると、視力の悪いユーザーにとって便利です携帯電話システムの設定機能 - システム設定インターフェイスに入る方法 - 設定インターフェイスで「表示」オプションを見つけて入力します。 - 「フォント サイズ」オプションを見つけて、サードパーティでフォント サイズを調整します。アプリケーション - フォント サイズの調整をサポートするアプリケーションをダウンロードしてインストールします - アプリケーションを開いて、関連する設定インターフェイスに入ります - 個人に応じて

Win11 管理者権限の取得方法のまとめ. Windows 11 オペレーティング システムでは、管理者権限は、ユーザーがシステム上でさまざまな操作を実行できるようにする非常に重要な権限の 1 つです。ソフトウェアのインストールやシステム設定の変更など、一部の操作を完了するために管理者権限の取得が必要になる場合があります。以下にWin11の管理者権限を取得する方法をまとめましたので、お役に立てれば幸いです。 1. ショートカット キーを使用する Windows 11 システムでは、ショートカット キーを使用してコマンド プロンプトをすばやく開くことができます。

テクノロジーの発展に伴い、モバイルゲームは人々の生活に欠かせないものになりました。かわいいドラゴンエッグの画像と面白い孵化過程で多くのプレイヤーの注目を集めており、その中でも注目を集めているゲームの一つがモバイル版ドラゴンエッグです。プレイヤーがゲーム内で自分のドラゴンをより適切に育成し成長させることができるように、この記事ではモバイル版でドラゴンの卵を孵化させる方法を紹介します。 1. 適切な種類のドラゴン エッグを選択する プレイヤーは、ゲーム内で提供されるさまざまな種類のドラゴン エッグの属性と能力に基づいて、自分に適したドラゴン エッグの種類を慎重に選択する必要があります。 2. 孵化機のレベルをアップグレードします。プレイヤーはタスクを完了し、小道具を収集することで孵化機のレベルを向上させる必要があります。孵化機のレベルは孵化速度と孵化成功率を決定します。 3. プレイヤーはゲームに参加する必要がある孵化に必要なリソースを収集します。

Oracleバージョンのクエリ方法を詳しく解説 Oracleは、世界で最も人気のあるリレーショナルデータベース管理システムの1つで、豊富な機能と強力なパフォーマンスを提供し、企業で広く使用されています。データベースの管理と開発のプロセスでは、Oracle データベースのバージョンを理解することが非常に重要です。この記事では、Oracle データベースのバージョン情報をクエリする方法と具体的なコード例を詳しく紹介します。単純な SQL ステートメントを実行して、Oracle データベース内の SQL ステートメントのデータベース バージョンをクエリします。
