第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Symfony 表單:如何將不同的主題/小部件應(yīng)用于特定的表單字段?

Symfony 表單:如何將不同的主題/小部件應(yīng)用于特定的表單字段?

PHP
慕桂英546537 2023-03-04 11:01:21
基于 Symfony 3.4 的表單包含多個(gè)CheckboxType字段。其中一些字段應(yīng)顯示為普通復(fù)選框(= 使用默認(rèn)復(fù)選框小部件),而其他一些應(yīng)顯示為開/關(guān)開關(guān)(如 iOS UISwitche)。因此,在相同類型的相同表單字段中 ( CheckboxType) 應(yīng)該使用不同的小部件。我怎樣才能做到這一點(diǎn)?解決方案 1:當(dāng)然我可以將自定義應(yīng)用form_theme到完整的表單 ( {% form_theme form 'AppBundle:Form:myTheme.html.twig' %})。但這會(huì)影響表單中的所有復(fù)選框,而不僅僅是一個(gè)。所以這不是解決方案。解決方案 2:一種可行的解決方案是使用其 id 將不同的小部件應(yīng)用于一個(gè)特定字段:{% block _user_registration_form_someCheckBoxRow %}     ... {% endblock %}雖然此解決方案有效,但我將不得不為所有受影響的表單中的所有受影響的字段創(chuàng)建/覆蓋相同的塊。這非常麻煩,因此不是一個(gè)好的解決方案。解決方案 3:另一個(gè)可行的解決方案是創(chuàng)建一個(gè)自定義項(xiàng),F(xiàn)ormType供應(yīng)顯示為開關(guān)的復(fù)選框使用。此表單類型將擴(kuò)展CheckboxType并且除了重寫blockPrefix.雖然這非常接近于一個(gè)好的解決方案,但有一個(gè)主要缺點(diǎn):假設(shè)復(fù)選框開關(guān)有不同的主題/小部件。一個(gè)標(biāo)簽在頂部,一個(gè)標(biāo)簽在開關(guān)旁邊,等等。這些樣式中的每一個(gè)不僅需要自己的小部件,還需要自己的表單類型,需要在 等中注冊(cè)。這當(dāng)然可以FormPass.php工作但也相當(dāng)麻煩且容易出錯(cuò)。所以,這將是解決方案,但不是nice一個(gè)。難道沒有更好的辦法嗎?我正在尋找類似的東西{{ form_row(form.someCheckbox, 'someWidget') }}。每個(gè)主題只有一個(gè)額外的文件,并且可以準(zhǔn)確地分辨出哪個(gè)字段使用哪個(gè)主題。不需要額外的類、配置等。我以這種方式一無所獲。使用虛擬表單類型真的是最好的解決方案嗎?
查看完整描述

2 回答

?
一只萌萌小番薯

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊

以下內(nèi)容適用于 Symfony 5.0.x(盡管 3.4 不需要進(jìn)行重大更改,可能只需要一些額外的配置):


要抽象主題處理,請(qǐng)定義您自己的復(fù)選框類型,如下(例如):


<?php

declare(strict_types=1);


namespace App\Form\Type;


use Symfony\Component\Form\AbstractType;

use Symfony\Component\Form\Extension\Core\Type\CheckboxType;

use Symfony\Component\OptionsResolver\Options;

use Symfony\Component\OptionsResolver\OptionsResolver;


class ThemedCheckboxType extends AbstractType

{

? ? /**

? ? ?* @param OptionsResolver $resolver

? ? ?*/

? ? public function configureOptions(OptionsResolver $resolver): void

? ? {

? ? ? ? $resolver

? ? ? ? ? ? ->setDefaults([

? ? ? ? ? ? ? ? 'theme' => 'default',

? ? ? ? ? ? ? ? 'block_prefix' => static function (Options $options): ?string {

? ? ? ? ? ? ? ? ? ? return [

? ? ? ? ? ? ? ? ? ? ? ? 'default' => null,

? ? ? ? ? ? ? ? ? ? ? ? 'theme-a' => 'theme_a_checkbox',

? ? ? ? ? ? ? ? ? ? ? ? 'theme-b' => 'theme_b_checkbox',

? ? ? ? ? ? ? ? ? ? ][$options['theme']];

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ])

? ? ? ? ? ? ->setAllowedValues('theme', ['default', 'theme-a', 'theme-b']);

? ? }


? ? /**

? ? ?* @inheritDoc

? ? ?*/

? ? public function getParent(): string

? ? {

? ? ? ? return CheckboxType::class;

? ? }

}

然后在需要的地方簡單地使用它,例如:


$builder->add('test_a1', ThemedCheckboxType::class, [

? ? 'theme' => 'theme-a', // or others

]);

這樣,您可以注入自己的表單主題,在需要時(shí)直接操作復(fù)選框,例如


{% block theme_a_checkbox_widget %}

? ? <em>Theme-A</em>

? ? {{ block('checkbox_widget') }}

{% endblock %}


{% block theme_b_checkbox_widget %}

? ? <em>Theme-B</em>

? ? {{ block('checkbox_widget') }}

{% endblock %}

如果您不想使用額外的表單類型,可以使用自定義表單擴(kuò)展來為默認(rèn)復(fù)選框類型添加選項(xiàng)來實(shí)現(xiàn)同樣的效果。請(qǐng)參閱: https: //symfony.com/doc/current/form/create_form_type_extension.html


例如:


<?php

declare(strict_types=1);


namespace App\Form\Extension;


use Symfony\Component\Form\AbstractTypeExtension;

use Symfony\Component\Form\Extension\Core\Type\CheckboxType;

use Symfony\Component\OptionsResolver\Options;

use Symfony\Component\OptionsResolver\OptionsResolver;


class CheckboxTypeExtension extends AbstractTypeExtension

{

? ? /**

? ? ?* @inheritDoc

? ? ?*/

? ? public static function getExtendedTypes(): iterable

? ? {

? ? ? ? return [CheckboxType::class];

? ? }


? ? /**

? ? ?* @inheritDoc

? ? ?*/

? ? public function configureOptions(OptionsResolver $resolver): void

? ? {

? ? ? ? $resolver

? ? ? ? ? ? ->setDefaults([

? ? ? ? ? ? ? ? 'theme' => 'default',

? ? ? ? ? ? ? ? 'block_prefix' => static function (Options $options): ?string {

? ? ? ? ? ? ? ? ? ? return [

? ? ? ? ? ? ? ? ? ? ? ? 'default' => null,

? ? ? ? ? ? ? ? ? ? ? ? 'theme-a' => 'theme_a_checkbox',

? ? ? ? ? ? ? ? ? ? ? ? 'theme-b' => 'theme_b_checkbox',

? ? ? ? ? ? ? ? ? ? ][$options['theme']];

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ])

? ? ? ? ? ? ->setAllowedValues('theme', ['default', 'theme-a', 'theme-b']);

? ? }

}

這允許:


$builder->add('test_a1', CheckboxType::class, [

? ? 'theme' => 'theme-a',

]);


查看完整回答
反對(duì) 回復(fù) 2023-03-04
?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

您可以將主題應(yīng)用于單個(gè)復(fù)選框:

{%?form_theme?form.my_special_checkbox?'Form/Theme/special_checkbox.html.twig'?%}

或者,如果您不需要單獨(dú)的主題(單個(gè)用例),您可以在當(dāng)前 Twig 文件中編寫塊:

{%?block?_my_checkbox_widget_block?%}
????{#?the?theme?#}
????{%?endblock?%}

{%?form_theme?form.my_special_checkbox?_self?%}

我會(huì)使用自定義塊名稱創(chuàng)建自定義復(fù)選框組件并將其放入全局表單主題中,以便我可以在整個(gè)應(yīng)用程序中重用它。


查看完整回答
反對(duì) 回復(fù) 2023-03-04
  • 2 回答
  • 0 關(guān)注
  • 151 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)