kunicmarko / sonata-annotation-bundle
Symfony Bundle,为 Sonata Admin 添加注解。
Requires
- php: ^7.1
- doctrine/annotations: ^1.6
- sonata-project/admin-bundle: ^3.35
- symfony/config: ^3.4 || ^4.0
- symfony/dependency-injection: ^3.4 || ^4.0
- symfony/finder: ^3.4 || ^4.0
- symfony/http-kernel: ^3.4 || ^4.0
Requires (Dev)
- behat/behat: ^3.5
- behat/mink: 1.7.x-dev
- behat/mink-browserkit-driver: ^1.3
- behat/mink-extension: ^2.3
- behat/mink-goutte-driver: ^1.2
- behat/mink-selenium2-driver: ^1.3
- behat/symfony2-extension: ^2.1
- doctrine/doctrine-fixtures-bundle: ^3.0
- matthiasnoback/symfony-dependency-injection-test: ^3.0
- phpstan/phpstan-phpunit: ^0.11.2
- sonata-project/doctrine-orm-admin-bundle: ^3.6
- symfony/framework-bundle: ^3.4 || ^4.0
- symfony/phpunit-bridge: ^4.0
- symfony/var-dumper: ^3.4 || ^4.0
Conflicts
- sonata-project/admin-bundle: <3.35
This package is auto-updated.
Last update: 2020-11-16 04:33:35 UTC
README
为 Sonata Admin 添加注解。
目的是减少噪音,避免创建大量仅包含映射而不做其他任何事情的管理类。为您的模型添加注解即可。如果您需要此包未涵盖的功能,请创建管理类。
此包深受 IbrowsSonataAdminAnnotationBundle 的启发。
文档
安装
1. 使用 composer 添加依赖
composer require kunicmarko/sonata-annotation-bundle
2. 在您的 Kernel 中注册该包
return [ //... KunicMarko\SonataAnnotationBundle\SonataAnnotationBundle::class => ['all' => true], ];
配置
默认情况下,我们扫描您的 src
目录中的所有文件,如果您将实体保存到其他位置,可以更改目录
sonata_annotation: directory: '%kernel.project_dir%/src/'
使用方法
无需创建用于管理的类,只需为您的实体添加注解即可。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\FormField() * @Sonata\ListField() * @Sonata\ShowField() * @Sonata\DatagridField() * * @ORM\Column(name="name", type="string", length=255) */ private $name; }
清除缓存
bin/console cache:clear
然后您将在侧边栏中看到管理界面。
注解
管理
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; use App\Controller\YourCRUDController; use App\Admin\YourAdmin; /** * @Sonata\Admin( * label="Category", * managerType="orm", * group="Category", * showInDashboard=true, * keepOpen=true, * onTop=true, * icon="<i class='fa fa-user'></i>", * labelTranslatorStrategy="sonata.admin.label.strategy.native", * labelCatalogue="App", * pagerType="simple", * controller=YourCRUDController::class, * serviceId="app.admin.category", * admin=YourAdmin::class, * code="admin_code", * ) * * @ORM\Table * @ORM\Entity */ class Category { }
访问
如果您正在使用此处描述的角色处理程序 (见此处),您可以使用此注解为每个角色添加权限。
即使没有管理注解,此注解也可以使用。如果您为实体有管理类,您仍然可以使用此注解。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @Sonata\Access("ROLE_CLIENT", permissions={"LIST", "VIEW", "EXPORT"}) * * @ORM\Table * @ORM\Entity */ class Category { }
添加子项
您可以在此处了解更多关于此功能的信息 (见此处)。
即使没有管理注解,此注解也可以使用。如果您为实体有管理类,您仍然可以使用此注解。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * @Sonata\AddChild(class=Post::class, field="category") * * @ORM\Table * @ORM\Entity */ class Category { }
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Post") * * @ORM\Table * @ORM\Entity */ class Post { /** * @ORM\ManyToOne(targetEntity="Category") * @ORM\JoinColumn(name="category_id", referencedColumnName="id") */ private $category; }
表单字段
您可以指定操作选项,允许您为创建和编辑操作具有不同的字段或为同一字段具有不同的配置。如果没有设置,字段将用于创建和编辑。除此之外,您还可以设置字段的显示位置。位置1将是第一个渲染的字段,后面的数字依次递增。如果字段没有位置,它将在所有具有位置的字段之后渲染。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; /** * @Sonata\Admin("Category") * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\FormField( * action="create", * type="", * options={}, * fieldDescriptionOptions={}, * position=1 * ) * * @ORM\Column(name="name", type="string", length=255) */ private $name; /** * @Sonata\FormField( * type="", * options={}, * fieldDescriptionOptions={}, * position=2 * ) * * @ORM\Column(name="description", type="string", length=255) */ private $description; /** * @Sonata\FormField( * action="create", * type=TextType::class * ) * * @Sonata\FormField( * action="edit", * type=TextareaType::class * ) * * @ORM\Column(name="something", type="string", length=255) */ private $something; }
显示字段
您可以设置字段的显示位置。位置1将是第一个渲染的字段,后面的数字依次递增。如果字段没有位置,它将在所有具有位置的字段之后渲染。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\ShowField( * type="", * fieldDescriptionOptions={}, * position=1 * ) * * @ORM\Column(name="name", type="string", length=255) */ private $name; /** * @Sonata\ShowField() */ public function showThis(): string { return 'show value'; } }
显示关联字段
您可以设置字段的显示位置。位置1将是第一个渲染的字段,后面的数字依次递增。如果字段没有位置,它将在所有具有位置的字段之后渲染。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\ShowAssociationField( * field="name", * type="", * fieldDescriptionOptions={}, * position=1 * ) * * @Sonata\ShowAssociationField( * field="email", * type="", * fieldDescriptionOptions={}, * position=1 * ) * * @ORM\ManyToOne(targetEntity="Owner") * @ORM\JoinColumn(name="owner_id", referencedColumnName="id") */ private $owner; }
列表字段
您可以设置字段的显示位置。位置1将是第一个渲染的字段,后面的数字依次递增。如果字段没有位置,它将在所有具有位置的字段之后渲染。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\ListField(identifier=true) * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @Sonata\ListField( * type="", * fieldDescriptionOptions={}, * identifier=false, * position=1 * ) * * @ORM\Column(name="name", type="string", length=255) */ private $name; /** * @Sonata\ListField(position=1) */ public function listThis(): string { return 'list value'; } }
列表关联字段
您可以设置字段的显示位置。位置1将是第一个渲染的字段,后面的数字依次递增。如果字段没有位置,它将在所有具有位置的字段之后渲染。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\ListAssociationField( * field="name", * type="", * fieldDescriptionOptions={}, * identifier=false, * position=1 * ) * * @Sonata\ListAssociationField( * field="email", * type="", * fieldDescriptionOptions={}, * identifier=false * ) * * @ORM\ManyToOne(targetEntity="Owner") * @ORM\JoinColumn(name="owner_id", referencedColumnName="id") */ private $owner; }
数据网格字段
您可以设置字段的显示位置。位置1将是第一个渲染的字段,后面的数字依次递增。如果字段没有位置,它将在所有具有位置的字段之后渲染。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\DatagridField( * type="", * fieldDescriptionOptions={}, * filterOptions={}, * fieldType="", * fieldOptions={}, * position=1 * ) * * @ORM\Column(name="name", type="string", length=255) */ private $name; }
数据网格关联字段
您可以设置字段的显示位置。位置1将是第一个渲染的字段,后面的数字依次递增。如果字段没有位置,它将在所有具有位置的字段之后渲染。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\DatagridAssociationField( * field="name", * type="", * fieldDescriptionOptions={}, * filterOptions={}, * fieldType="", * fieldOptions={}, * position=1 * ) * * @Sonata\DatagridAssociationField( * field="email", * type="", * fieldDescriptionOptions={}, * filterOptions={}, * fieldType="", * fieldOptions={} * ) * * @ORM\ManyToOne(targetEntity="Owner") * @ORM\JoinColumn(name="owner_id", referencedColumnName="id") */ private $owner; }
导出字段
您可以为要导出的字段和方法添加注释,也可以为字段添加标签,如果留空,则将使用字段名称作为标签。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\ExportField() * * @ORM\Column(name="name", type="string", length=255) */ private $name; /** * @Sonata\ExportField("Custom Name") * * @ORM\Column(name="tag", type="string", length=255) */ private $tag; /** * @Sonata\ExportField() */ public function exportThis(): string { return 'export value'; } }
导出关联字段
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\ExportAssociationField( * field="name", * label="Owner" * ) * * @Sonata\ExportAssociationField( * field="email", * label="Email" * ) * * @ORM\ManyToOne(targetEntity="Owner") * @ORM\JoinColumn(name="owner_id", referencedColumnName="id") */ private $owner; }
导出格式
您可以自定义要允许的导出格式,如果此注释不存在,则显示所有格式。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; /** * @Sonata\Admin("Category") * * @Sonata\ExportFormats({"json", "xml"}) * * @ORM\Table * @ORM\Entity */ class Category { /** * @Sonata\ExportField() * * @ORM\Column(name="name", type="string", length=255) */ private $name; }
添加路由
向您的管理类添加自定义路由
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; use App\Controller\YourCRUDController; /** * @Sonata\Admin( * label="Category", * controller=YourCRUDController::class * ) * * @Sonata\AddRoute("import") * @Sonata\AddRoute(name="send_mail", path="{id}/send_mail") * * @ORM\Table * @ORM\Entity */ class Category { }
删除路由
删除已存在的路由
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; use App\Controller\YourCRUDController; /** * @Sonata\Admin( * label="Category", * controller=YourCRUDController::class * ) * * @Sonata\RemoveRoute("edit") * * @ORM\Table * @ORM\Entity */ class Category { }
操作按钮
这将在列表视图中的添加按钮旁边添加按钮。您可以在这里找到模板的样式。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; use App\Controller\YourCRUDController; /** * @Sonata\Admin( * label="Category", * controller=YourCRUDController::class * ) * * @Sonata\AddRoute(name="import", path="/import") * * @Sonata\ActionButton("import_action_button.html.twig") * * @ORM\Table * @ORM\Entity */ class Category { }
仪表板操作
这将在该实体的仪表板块中添加按钮。您可以在这里找到模板的样式。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; use App\Controller\YourCRUDController; /** * @Sonata\Admin( * label="Category", * controller=YourCRUDController::class * ) * * @Sonata\AddRoute(name="import", path="/import") * * @Sonata\DashboardAction("import_dashboard_button.html.twig") * * @ORM\Table * @ORM\Entity */ class Category { }
列表操作
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; use App\Controller\YourCRUDController; /** * @Sonata\Admin( * label="Category", * controller=YourCRUDController::class * ) * * @Sonata\AddRoute(name="import", path="/import") * * @Sonata\ListAction("show") * @Sonata\ListAction("edit") * @Sonata\ListAction("delete") * @Sonata\ListAction(name="import", options={"template"="import_list_button.html.twig"}) * * @ORM\Table * @ORM\Entity */ class Category { }
数据网格值
如此处所述。
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; use App\Controller\YourCRUDController; /** * @Sonata\Admin("Category") * * @Sonata\DatagridValues({"_sort_by":"p.name"}) * * @ORM\Table * @ORM\Entity */ class Category { /** * @ORM\Column(name="name", type="string", length=255) */ private $name; }
扩展管理器
有时您需要做一些自定义的事情,但这个包无法帮助您,但您仍然想为其他大多数事情使用注释。您可以扩展我们的管理类 KunicMarko\SonataAnnotationBundle\Admin\AnnotationAdmin
并覆盖您想要的方法。
<?php namespace App\Admin; use KunicMarko\SonataAnnotationBundle\Admin\AnnotationAdmin; class YourAdmin extends AnnotationAdmin { //do what you want }
然后在您的实体中,只需提供该类
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; use KunicMarko\SonataAnnotationBundle\Annotation as Sonata; use App\Admin\YourAdmin; /** * @Sonata\Admin( * label="Category", * admin=YourAdmin::class * ) * * @ORM\Table * @ORM\Entity */ class Category { }