質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

Q&A

0回答

1249閲覧

独自のバリデーションが正しく動作しない

nuages

総合スコア40

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

0グッド

0クリップ

投稿2018/12/17 13:49

編集2018/12/17 14:40

Symfony 3.4 で独自のバリデーションルールを作っています。
データベースを検証するバリデーションなのでサービスとして作って DependencyInjection でサービスコンテナーを扱えるようにするつもりです。

一応簡単なサンプルを作って動作することは確認できたのですが使い方によってエラーが起きてしまいます。

php

1<?php 2namespace AppBundle\Validator\Constraints; 3 4use Symfony\Component\Validator\Constraint; 5 6class Example extends Constraint 7{ 8 public $message = 'this is example.'; 9 10 public function validatedBy() 11 { 12 return 'example_validator'; 13 } 14}

yaml

1 app.validator.example: 2 class: AppBundle\Validator\Constraints\ExampleValidator 3 tags: 4 - { name: validator.constraint_validator, alias: example_validator }

これは下記のような FormBuilder では正しく動作しました。

php

1 $builder 2 ->add('title', TextType::class, [ 3 'constraints' => [new MyAssert\Example()] 4 ])

しかし Validator 単体で使用すると ClassNotFoundException が発生します。

php

1 $validator = Validation::createValidator(); 2 $violations = $validator->validate('test', array( 3 new MyAssert\Example() 4 ));

エラーの内容は次のとおりです。

Attempted to load class "example_validator" from the global namespace. Did you forget a "use" statement?

おそらく validatedBy() の return 'example_validator'; の部分のことだと思うのですがどのように書き換えればいいかわかりません。

FormBuilder でも単体でも動作するようにしたいのですがなにかが足りていないのでしょうか?


追記

バリデーター自体は次のようになっています。完全に検証用なのでバリデートはできません。

class ExampleValidator extends ConstraintValidator { public function __construct(Container $container) { $this->container = $container; } public function validate($value, Constraint $constraint) { dump($this->container->get("doctrine")); exit; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xenbeat

2018/12/17 14:24

これ実際のソースコードですか? ざっと見た感じnamespaceとかclassの名前が一致してないようですが。
nuages

2018/12/17 14:44 編集

バリデーター自体のソースコードも掲載しました。コンテナーが正しく渡せているかを確認するためのものですので中身はほとんどありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問