表单视图
编辑该页面表单视图
你看过绝对顶级的冰山前一章。但是有更多的发现!在接下来的章节中,您将创建一个更复杂的管理类博客
模型。与此同时,您将学习如何使事情更漂亮。
引导管理类
类定义的基本一样CategoryAdmin
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ / src / Admin / BlogPostAdmin.php名称空间应用程序\管理;使用奏鸣曲\AdminBundle\管理\AbstractAdmin;使用奏鸣曲\AdminBundle\数据表格\ListMapper;使用奏鸣曲\AdminBundle\形式\FormMapper;最后类BlogPostAdmin扩展AbstractAdmin{受保护的函数configureFormFields(FormMapper美元形式):无效{/ /……美元配置形式}受保护的函数configureListFields(ListMapper美元列表):无效{/ /……美元配置列表}}
这同样适用于服务定义:
1 2 3 4 5 6 7
#配置/ services.yaml服务:admin.blog_post:类:App \ Admin \ BlogPostAdmin标签:- - - - - -{名称:sonata.admin,model_class:App \实体\博客,manager_type:orm,标签:“博客”}
配置表单映射器
如果你已经知道了ob娱乐下载Symfony表单组件,FormMapper
看起来很相似。
您使用add ()
方法将字段添加到表单。第一个参数是属性字段值地图的名称,第二个参数是类型的字段(参见字段类型引用),第三个参数是额外的选项来定制表单类型。只需要第一个参数作为表单组件类型猜测猜测类型。
的博客
模型有4个属性:id
,标题
,身体
,类别
。的id
属性的值是由数据库自动生成。这意味着表单视图需要3字段:标题、身体和类别。
标题和主体字段TextType
和TextareaType
字段,你可以马上将它们添加:
1 2 3 4 5 6 7 8 9 10 11 12
/ / src / Admin / BlogPostAdmin.php使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextareaType;受保护的函数configureFormFields(FormMapper美元形式):无效{美元形式- >add (“标题”,TextType::类)- >add (“身体”,TextareaType::类);}
然而,类别字段将引用另一个模型。你如何解决?
添加字段引用其他模型
使用实体类型
你有几个不同的选择如何添加字段引用其他模型。最基本的选择是使用EntityType
提供的教义桥。这将使一个选择字段与可用的实体的选择:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src / Admin / BlogPostAdmin.php使用应用程序\实体\类别;使用ob娱乐下载\桥\学说\形式\类型\EntityType;受保护的函数configureFormFields(FormMapper美元形式):无效{美元形式/ /……- >add (“类别”,EntityType::类,“类”= >类别::类,“choice_label”= >“名字”]);}
每个博客都只有一个类别,它显示为一个选择列表:
当管理员想要创建一个新的类别,他们需要去类别管理页面,创建一个新的类别。
使用奏鸣曲模型类型
为了减轻管理员,您可以使用ModelType领域。这个字段类型也将呈现一个选择,但它包含了一个创建按钮,打开一个对话框的管理参考模型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / src / Admin / BlogPostAdmin.php使用应用程序\实体\类别;使用奏鸣曲\AdminBundle\形式\类型\ModelType;受保护的函数configureFormFields(FormMapper美元形式):无效{美元形式- >add (“类别”,ModelType::类,“类”= >类别::类,“属性”= >“名字”]);}
使用组和标签
使用组
目前,一切都放进一个街区。自从形式只有三个字段,它仍然是可用的,但它可以成为相当混乱很快。为了解决这个问题,表单映射器还支持分组字段。
例如,标题和主体内容字段可以属于集团和类别字段元数据组。要做到这一点,使用与()
方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/ / src / Admin / BlogPostAdmin.php使用应用程序\实体\类别;使用奏鸣曲\AdminBundle\形式\类型\ModelType使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextareaType;受保护的函数configureFormFields(FormMapper美元形式):无效{美元形式- >(“内容”)- >add (“标题”,TextType::类)- >add (“身体”,TextareaType::类)- >结束()- >(“元数据”)- >add (“类别”,ModelType::类,“类”= >类别::类,“属性”= >“名字”,)- >结束();}
第一个参数是该集团的名称/标签,第二个参数是一个数组的选项。例如,您可以通过HTML类集团为了调整样式:
1 2 3 4 5 6 7 8 9 10 11 12 13
/ / src / Admin / BlogPostAdmin.php受保护的函数configureFormFields(FormMapper美元形式):无效{美元形式- >(“内容”,(“类”= >“col-md-9”])/ /……- >结束()- >(“元数据”,(“类”= >“col-md-3”])/ /……- >结束();}
这将导致一个非常优秀的编辑页面:
使用标签
如果你有更多的选择,也可以使用多个选项卡使用选项卡()
快捷方法:
1 2 3 4 5 6 7 8 9 10 11 12
美元形式- >选项卡(“职位”)- >(“内容”,……)/ /……- >结束()/ /……- >结束()- >选项卡(“发布选项”)/ /……- >结束();
创建一个博客
你已经完成你的漂亮的表格视图博客
模型。现在是时候来测试它通过创建一个职位。
按“创建”按钮后,你可能看到一个绿色的消息:项”AppEntity博客:00000000192 ba93c000000001b786396“已经成功创建了。
虽然很友好SonataAdminBundle通知管理成功的创建、散列的名称和一些不是很好的阅读。这是默认SonataAdminBundle对象的字符串表示。您可以通过定义一个变化toString ()
方法在管理类。这个接收对象转换到一个字符串作为第一个参数:
1 2 3 4 5 6 7 8 9 10 11 12 13
/ / src / Admin / BlogPostAdmin.php使用应用程序\实体\博客;最后类BlogPostAdmin扩展AbstractAdmin{公共函数toString(对象美元对象):字符串{返回美元对象运算符博客吗?美元对象- >getTitle ():“博客”;/ /创建视图上的面包屑所示}}
请注意
没有下划线前缀!toString ()
是正确的!