1

変数をフォーム バリデーターの制約に渡そうとしましたが、できません。私はそれをやっています:

$payForm = $this->createForm(new CableTVPayType(), null, array('balance' => $balance));

また、CableTVPayType では次のようになります。

public function getDefaultOptions(array $options)
{
    $maxSumm = $options['balance'] - 100;
    [...]

私の maxSumm は私が望むものですが、Symfiony は $options 配列をチェックします。「バランス」はデフォルトのオプションではなく、これについて文句を言う:

The option "balance" does not exist 

カスタム変数を検証に渡す別のより正しい方法はありますか?

4

2 に答える 2

2

型のすべてのインスタンスで使用されるもののコンストラクターを使用します。たとえば、型が機能するためにエンティティ マネージャーが必要な場合があります。すべてのフォーム インスタンスで再利用されます。

たとえば、特定のものはオプションを使用します。インスタンス固有のものにコンストラクターを使用する場合、すべてのインスタンスは、最初のインスタンスのコンストラクターに渡す値を取得します。

/**
 * @FormType
 */
class PayType extends AbstractType {

    private $someService;

    /**
     * @InjectParams
     */
    public function __construct(SomeService $someService)
    {
        $this->someService = $someService;
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'balance' => 0
        );
    }

    public function getName() 
    {
        return 'pay';
    }
}
$form = $this->createForm('pay', null, array('balance' => $balance));

@FormType注釈は型をサービスとして登録することに注意してください。インスタンスを手動で作成する代わりに、タイプの名前を使用できます。型にサービスを注入する必要がある場合は、さらに便利になります。payこの場合は、次のような代わりに名前だけを使用します。

$form = $this->createForm(new PayType($this->get('some_service')), null, array(
    'balance' => $balance
));
于 2012-08-10T06:48:45.190 に答える
0

これで完了!

クラスの変数を作成し、construct メソッドを介して値を渡す

class CableTVPayType extends AbstractType {

    private $maxSumm;

    public function __construct($maxSumm) {
        $this->maxSumm = $maxSumm;
    }

引数付きのフォームを作成

$payForm = $this->createForm(new CableTVPayType($someValue));

これで、フォームで必要に応じてこの変数を使用できます。

于 2012-08-10T05:02:21.613 に答える