字段
编辑该页面字段
字段允许显示教义的内容在每个实体CRUD页面。EasyAdmin提供了内置的字段来显示所有的通用数据类型,但你也可以创建自己的领域。
配置要显示的字段
如果你的CRUD控制器扩展了的AbstractCrudController
由EasyAdmin提供,自动配置的字段。在指数
页面,您将看到几个字段和其他的页面你会看到许多领域如需要显示所有教义实体的属性。
实现configureFields ()
在你的CRUD方法控制器定制列表要显示的字段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
名称空间应用程序\控制器\管理;使用应用程序\实体\产品;使用EasyCorp\包\EasyAdminBundle\控制器\AbstractCrudController;类ProductCrudController扩展AbstractCrudController{公共静态函数getEntityFqcn():字符串{返回产品::类;}公共函数configureFields(字符串美元pageName):iterable{/ /……}/ /……}
有几种方法定义要显示的字段列表。
选项1。返回字符串的属性显示的名称。EasyAdmin会自动创建字段,适用于默认配置选项:
1 2 3 4 5 6 7 8 9 10
公共函数configureFields(字符串美元pageName):iterable{返回(“标题”,“描述”,“价格”,“股票”,“publishedAt”,);}
第二个选项。返回场
为教义的实体属性创建的对象。EasyAdmin转换这些通用的场
对象的特定对象用于显示每个类型的属性:
1 2 3 4 5 6 7 8 9 10 11 12
使用EasyCorp\包\EasyAdminBundle\场\场;公共函数configureFields(字符串美元pageName):iterable{返回(字段::新(“标题”),现场::新(“描述”),现场::新(“价格”),现场::新(“股票”),现场::新(“publishedAt”),);}
选项3。返回适当的字段对象显示每个属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用EasyCorp\包\EasyAdminBundle\场\DateTimeField;使用EasyCorp\包\EasyAdminBundle\场\IntegerField;使用EasyCorp\包\EasyAdminBundle\场\MoneyField;使用EasyCorp\包\EasyAdminBundle\场\TextEditorField;使用EasyCorp\包\EasyAdminBundle\场\文本框;公共函数configureFields(字符串美元pageName):iterable{返回(文本框::新(“标题”),TextEditorField::新(“描述”),MoneyField::新(“价格”)- >setCurrency (“欧元”),IntegerField::新(“股票”),DateTimeField::新(“publishedAt”),);}
唯一强制参数的构造函数的名字是实体财产管理的原则。EasyAdmin使用PropertyAccess组件属性的值,所以实体定义他们可以访问公共属性(如。公共firstName美元
)或(如公共方法。公共函数getFirstName ()
,公共函数firstName ()
)。
请注意
EasyAdmin使用Symfob娱乐下载ony的形式来创建和编辑理论实体。这就是为什么所有的实体属性必须nullable:他们的制定者需要接受零
价值观和他们的getter方法必须被允许返回零
。在数据库中,没有相关的字段可以为空。
地图上未标明的字段
字段通常引用属性相关的学说的实体。然而,他们也可以参考的方法任何属性不相关联的实体。例如,如果您的客户
实体定义了firstName
和姓
属性,您可能想要显示一个“姓名”字段值合并。
为此,对实体添加以下方法:
1 2 3 4 5 6 7 8 9 10 11 12
使用学说\ORM\映射作为ORM;/ * *@ORM实体\ * /类客户{/ /……公共函数getFullName(){返回美元这- >getFirstName ()。' '。美元这- >getLastName ();}}
现在,添加一个fullName
领域,指的是这个getFullName ()
方法。字段名称和方法之间的转换必须遵守的规则PropertyAccess组件(如。foo_bar
- >getFooBar ()
或fooBar ()
):
1 2 3 4 5 6 7
公共函数configureFields(字符串美元pageName):iterable{返回(文本框::新(“fullName”),/ /……];}
地图上未标明的领域的主要限制是不合适的,因为他们不能被包括在查询原则。
每页显示不同的领域
有几种方法来显示字段有条件地根据当前页面:
1 2 3 4 5 6 7 8 9 10 11
公共函数configureFields(字符串美元pageName):iterable{返回[IdField::新(“id”)- >hideOnForm(),文本框::新(“firstName”),文本框::新(“姓”),文本框::新(“电话”),EmailField::新(“电子邮件”)- >DateTimeField hideOnIndex ()::新(“createdAt”)- >onlyOnDetail ()];}
这些都是可用的方法:
hideOnIndex ()
hideOnDetail ()
hideOnForm ()
(在隐藏字段编辑
和新
页)hideWhenCreating ()
hideWhenUpdating ()
onlyOnIndex ()
onlyOnDetail ()
onlyOnForms ()
除了(隐藏字段在所有页面编辑
和新
)onlyWhenCreating ()
onlyWhenUpdating ()
如果字段来显示每个页面上是完全不同的,使用给定的pageName美元
参数来区分它们:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
使用EasyCorp\包\EasyAdminBundle\配置\Crud;公共函数configureFields(字符串美元pageName):iterable{美元id= IdField::新(“id”);美元firstName=文本框::新(“firstName”);美元姓=文本框::新(“姓”);美元电话=文本框::新(“电话”);美元电子邮件= EmailField::新(“电子邮件”);美元createdAt= DateTimeField::新(“createdAt”);如果(Crud::PAGE_INDEX = = =美元pageName){返回(美元id,美元firstName,美元姓,美元电话];}elseif(Crud::PAGE_DETAIL = = =美元pageName){返回(“…'];}其他的{返回(“…'];}}
如果你需要更大的控制,可以考虑使用以下定义的字段使用的方法PHP发电机:
1 2 3 4 5 6 7 8 9 10 11 12 13
公共函数configureFields(字符串美元pageName):iterable{收益率IdField::新(“id”)- >hideOnForm ();如果(“…一些表达……”){收益率文本框::新(“firstName”);收益率文本框::新(“姓”);}收益率文本框::新(“电话”);收益率EmailField::新(“电子邮件”)- >hideOnIndex ();收益率DateTimeField::新(“createdAt”)- >onlyOnDetail ();}
现场布局
表格的行
默认情况下,EasyAdmin每一行显示一个表单字段。里面的一行,每个字段类型使用不同的默认宽度狭窄(如整数字段和代码编辑器领域很宽)。你可以覆盖这一行为setColumns ()
每个字段的方法。
使用这个选项之前,您必须熟悉引导网格系统把每一行划分成12个宽度相同的列,和引导断点,这是xs
< 576像素宽度(设备),sm
(> = 576 px),医学博士
(> = 768 px),lg
(> = 992 px),xl
(> = 1200 px)xxl)
(> = 1400 px)。
假设你想要显示两个字段startsAt
和endsAt
在同一行,他们每个人跨越6列的行。这是你如何配置,布局:
1 2 3 4 5 6 7 8 9 10 11
使用EasyCorp\包\EasyAdminBundle\场\DateTimeField;公共函数configureFields(字符串美元pageName):iterable{返回(/ /…DateTimeField::新(“startsAt”)- >setColumns (6),DateTimeField::新(“endsAt”)- >setColumns (6),);}
这个例子呈现两个字段相同的行,除了xs
和sm
断点,每个字段需要整个行(因为设备宽度太小了)。
如果你需要一个更好的控制的设计取决于设备的宽度,可以传递一个字符串的响应CSS类上定义字段的宽度不同的断点:
1 2 3 4 5 6 7 8 9 10 11
使用EasyCorp\包\EasyAdminBundle\场\DateTimeField;公共函数configureFields(字符串美元pageName):iterable{返回(/ /…DateTimeField::新(“startsAt”)- >setColumns (“col-sm-6 col-lg-5 col-xxl-3”),DateTimeField::新(“endsAt”)- >setColumns (“col-sm-6 col-lg-5 col-xxl-3”),);}
这个例子添加col-sm-6
覆盖默认的EasyAdmin行为也在同一行显示两个字段sm
断点。此外,它减少了的列数较大的断点(lg
和xxl)
)来改善这些领域的呈现。
提示
还可以使用CSS类重新排序和抵消列:
1
收益率DateTimeField::新(“endsAt”)- >setColumns (“col-sm-6 col-xxl-3 offset-lg-1顺序3”);
因为引导网格是如何工作的,当你手动配置字段列,每一行将包含尽可能多的领域。如果一个字段4列,下一个需要3列,行仍有12 - 4 - 3 = 5
列呈现其他领域。如果下一个字段需要超过5列,它呈现下一行。
有时你需要一个更好的控制的自动布局。例如,您可能想要在同一行显示两个或两个以上的字段,并确保没有其他字段显示在这一行,即使有足够的空间。为此,使用addRow ()
特殊的方法FormField
场力的创建一个新行(下一个字段将强行呈现新行):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
使用EasyCorp\包\EasyAdminBundle\场\BooleanField;使用EasyCorp\包\EasyAdminBundle\场\DateTimeField;使用EasyCorp\包\EasyAdminBundle\场\FormField;公共函数configureFields(字符串美元pageName):iterable{返回(/ /…DateTimeField::新(“startsAt”)- >setColumns (“col-sm-6 col-lg-5 col-xxl-3”),DateTimeField::新(“endsAt”)- >setColumns (“col-sm-6 col-lg-5 col-xxl-3”),FormField::addRow (),/ /可以通过断点的名称添加一行只有在一定的宽度/ / FormField: addRow (xl),/ /这个领域总是呈现自己行,即使有/ /足够的空间在前面行“lg”、“xl”和“词”断点BooleanField::新(“发布”)- >setColumns (2),);}
板形式
在你的页面显示的字段,你可以使用“板”把他们组用特别创建的FormField
对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30
使用EasyCorp\包\EasyAdminBundle\场\FormField;公共函数configureFields(字符串美元pageName):iterable{返回[IdField::新(“id”)- >hideOnForm (),/ /面板通常只显示一个标题FormField::addPanel (“用户详细信息”),文本框::新(“firstName”),文本框::新(“姓”),/ /面板没有标题只显示字段之间的分离FormField::DateTimeField addPanel ()::新(“createdAt”)- >onlyOnDetail (),/ /面板还可以定义自己的图标,CSS类和帮助信息FormField::addPanel (“联系信息”)- >setIcon (“电话”)- >addCssClass (“可选的”)- >setHelp (电话号码是首选的),文本框::新(“电话”),文本框::新(“电子邮件”)- >hideOnIndex (),/ /面板也可以折叠(有用,如果你的表单是长)/ /这使得面板默认折叠但呈现扩大FormField::addPanel (“联系信息”)- >可折叠的(),/ /这使得面板折叠和默认渲染它倒塌FormField::addPanel (“联系信息”)- >renderCollapsed ()];}
表单标签
在你的页面显示的字段,你可以把他们在使用“标签”选项卡用特别创建的FormField
对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27
使用EasyCorp\包\EasyAdminBundle\场\FormField;公共函数configureFields(字符串美元pageName):iterable{返回[IdField::新(“id”)- >hideOnForm (),/ /添加一个选项卡FormField::addTab (第一个选项卡的),/ /可以使用表单面板在表单选项卡FormField::addPanel (“用户详细信息”),/ /字段文本框::新(“firstName”),文本框::新(“姓”),/ /添加第二个表单选项卡/ /标签还可以定义自己的图标,CSS类和帮助信息FormField::addTab (“联系信息选项卡”)- >setIcon (“电话”)- >addCssClass (“可选的”)- >setHelp (电话号码是首选的),文本框::新(“电话”),);}
字段类型
这些都是EasyAdmin提供的内置字段:
ArrayField
AssociationField
AvatarField
BooleanField
ChoiceField
CodeEditorField
CollectionField
ColorField
CountryField
CurrencyField
DateField
DateTimeField
EmailField
HiddenField
IdField
ImageField
IntegerField
LanguageField
LocaleField
MoneyField
NumberField
PercentField
SlugField
TelephoneField
TextareaField
TextEditorField
文本框
TimeField
TimezoneField
UrlField
字段配置
本节显示了所有的配置选项字段类型。此外,一些字段定义额外的配置选项,如图所示字段引用。
标签选项
第二个可选参数的构造函数是标签:
1 2 3 4 5 6 7 8 9 10
/ /定义标签不明确或者设置为NULL/ /标签自动生成(例如“firstName”- >“名字”)文本框::新(“firstName”),文本框::新(“firstName”,零),/ /设置标签明确显示完全,标签文本框::新(“firstName”,“名字”),/ /设置标签错误为这个字段不显示任何标签文本框::新(“firstName”,假),
设计选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
文本框::新(“firstName”,“名字”)/ / CSS类/类应用领域内容(在“索引”页面)/ /或包装内容的行(在“细节”,“编辑”和“新”页)/ /使用此方法来通过EasyAdmin添加新类的应用- >addCssClass (“文字大一些文本加粗的)/ /使用其他方法如果你想删除任何EasyAdmin添加的CSS类- >setCssClass (“文字大一些文本加粗的)/ /这个定义了树枝模板用于呈现这一领域在“索引”和“细节”页面/ /(这是不习惯在“编辑”/“新”页面,因为它们使用Symfony形式主题)ob娱乐下载- >setTemplatePath (“管理/字段/ my_template.html.twig”)/ /有用例如右对齐数字/钱值(忽略此设置在“细节”页面)- >setTextAlign (“对”)
格式化选项
的formatValue ()
方法允许应用PHP调用之前呈现的价值指数
和细节
页:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
IntegerField::新(“股票”,“股票”)/ /回调通常只需要当前值作为参数- >formatValue (函数(美元价值){返回美元价值<10吗?sprintf (“% d * *低股票* *”,美元价值):美元价值;});TextEditorField::新(“描述”)/ /调用也收到整个实体实例作为第二个参数- >formatValue (函数(美元价值,美元实体){返回美元实体- >发表()?美元价值:“快到了……”;});/ /在PHP 7.4和更新可以使用箭头功能/ / - > formatValue (fn(美元值)= >美元价值< 10 ?sprintf (% d * *低股票* *的,美元值):美元值);/ / - > formatValue (fn(价值、实体美元)= > $实体- >发表()?美元的价值:“很快…”);
混杂。选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
文本框::新(“firstName”,“名字”)/ /如果这是真的,清单可以通过这个字段排序(默认值:TRUE)/ /未映射字段和教义协会不能排序- >setSortable (假)/ /帮助信息显示这一领域的“细节”,“编辑”和“新”页面- >setHelp (“…')/ / Symob娱乐下载fony表单类型用于呈现这一领域在“编辑”/“新”页面/ /(字段有这个选项的默认值,所以你通常不配置)- >setFormType (TextType::类)/ /数组的参数传递给Symfony表单类型ob娱乐下载/ /(这只覆盖的值通过表单类型选项;/ /它让所有其他现有类型选项不变)- >setFormTypeOptions ([“option_name”= >“option_value”])
字段引用
请注意
本节还没有准备好。我们正在努力。与此同时,你可以依赖IDE自动完成发现每个字段的所有配置选项。
创建自定义字段
是一个类实现一个字段EasyCorp
。虽然界面只需要实现一些方法,您可能希望添加内置领域的所有可用的方法来配置公共领域所有的选择。您可以使用EasyCorp
的。
假设您想要创建一个自定义MapField
呈现一个完整的地图对于一个给定的邮政地址。这是字段的类可以创建:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39
名称空间应用程序\管理\场;使用EasyCorp\包\EasyAdminBundle\合同\场\FieldInterface;使用EasyCorp\包\EasyAdminBundle\场\FieldTrait;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextareaType;最后类MapField实现了FieldInterface{使用FieldTrait;/ * * *@param字符串|假美元|空标签* /公共静态函数新(字符串美元propertyName,美元标签= null):自我{返回(新自我())- >setProperty (美元propertyName)- >setLabel (美元标签)/ /这个模板中使用“索引”和“细节”页面- >setTemplatePath (“管理/场/ map.html.twig”)/ /这是用于“编辑”和“新”页面编辑字段的内容/ /你也可以使用自己的表单类型- >setFormType (TextareaType::类)- >addCssClass (“分布图”)/ /加载CSS和JS给定Webpack安可资产相关的条目/ /在任何CRUD页面(索引/细节/编辑/新的)。它相当于调用/ / encore_entry_link_tags(“…”)和encore_entry_script_tags (……)- >addWebpackEncoreEntries (“admin-field-map”)/ /这些方法允许定义web加载时的资产/ /字段显示在任何CRUD页面(索引/细节/编辑/新)- >addCssFiles (“js / admin / field-map.css”)- >addJsFiles (“js / admin / field-map.js”);}}
接下来,创建模板用于渲染字段指数
和细节
CRUD页面。模板可以使用任何树枝模板功能和以下变量:
ea
,一个EasyCorp
实例的存储管理上下文它可以在所有后端模板;\包 \ EasyAdminBundle \上下文 \ AdminContext 场
,一个EasyCorp
实例存储配置和价值的呈现;\包 \ EasyAdminBundle \ Dto \ FieldDto 实体
,一个EasyCorp
实例的存储实体的实例字段所属对教义实体和其他有用的数据。\包 \ EasyAdminBundle \ Dto \ EntityDto
请注意
不使用这个模板编辑
和新
CRUD页面使用ob娱乐下载Symfony形式主题定义如何显示每个表单字段。
这是所有。你现在可以使用这个字段的CRUD控制器:
1 2 3 4 5 6 7 8 9
使用应用程序\管理\MapField;公共函数configureFields(字符串美元pageName):iterable{返回(/ /……MapField::新(“shipAddress”),);}
自定义选项
如果你的字段是可配置的以任何方式,你可以添加自定义选项。添加选项的推荐方法是将他们的名字定义为公共常量字段对象和使用setCustomOption ()
中定义的方法FieldTrait
他们的价值观。
想象一下,MapField
前一节中定义的允许使用谷歌地图或开放地图呈现地图。你可以添加这个选项如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33
名称空间应用程序\管理\场;使用EasyCorp\包\EasyAdminBundle\合同\场\FieldInterface;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextareaType;最后类MapField实现了FieldInterface{使用FieldTrait;公共常量OPTION_MAP_PROVIDER =“mapProvider”;公共静态函数新(字符串美元propertyName字符串,?美元标签= null):自我{返回(新自我())/ /……- >setCustomOption (自我::OPTION_MAP_PROVIDER,“公开”);}公共函数useGoogleMaps():自我{美元这- >setCustomOption (自我::OPTION_MAP_PROVIDER,“谷歌”);返回美元这;}公共函数useOpenStreetMap():自我{美元这- >setCustomOption (自我::OPTION_MAP_PROVIDER,“公开”);返回美元这;}}
以后你可以通过访问这些选项getCustomOptions ()
方法的DTO。例如,在一个树枝模板:
1 2 3 4 5 6 7 8 9 10 11
{# admin /场/ map.html。树枝#}{%如果“谷歌”= = = field.customOptions.get (mapProvider) %}{#……#}{%endif%}{#如果你作为公共常量定义字段选项,你也可以访问它们在模板(尽管生成的代码有点冗长)#}{%集map_provider_option =常数(' App \ \管理\ \ MapField: OPTION_MAP_PROVIDER”)%}{%如果“谷歌”= = = field.customOptions.get (map_provider_option) %}{#……#}{%endif%}
场配置器
一些默认的选项的一些字段的值取决于实体的属性,这是仅在运行时可用。这就是为什么你可以定义一个场配置器,这是一个类,在渲染之前更新的配置字段。
EasyAdmin定义大量的配置器内置字段。你也可以创建自己的配置器(配置自己的领域和/或内置的字段)。字段配置器实现的类EasyCorp
。
一旦实现,定义一个Symfony服务配置器和标签的ob娱乐下载ea.field_configurator
标签。你也可以选择定义优先级
标签的属性之前或之后运行配置器内置的。