我应该覆盖哪个文件来更改Sonata Admin中的编辑表单模板?

时间:2017-01-31 03:04:52

标签: css templates twig symfony sonata-admin

我按照本教程在我的奏鸣曲管理员(symfony3)中添加我的图像文件的预览

http://symfony.com/doc/current/bundles/SonataAdminBundle/cookbook/recipe_image_previews.html

但我无法添加CSS parte。图像太大了。

我应该覆盖其中一个奏鸣曲模板吗?如果是,我改变了哪个文件,我该怎么办? [我在sonata / symfony3中很新了]

如果没有,我应该如何在项目中添加css文件?

我的实际代码与教程完全相同:

class ImageAdmin extends Admin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        // get the current Image instance
        $image = $this->getSubject();

        // use $fileFieldOptions so we can add other options to the field
        $fileFieldOptions = array('required' => false);
        if ($image && ($webPath = $image->getWebPath())) {
            // get the container so the full path to the image can be set
            $container = $this->getConfigurationPool()->getContainer();
            $fullPath = $container->get('request')->getBasePath().'/'.$webPath;

            // add a 'help' option containing the preview's img tag
            $fileFieldOptions['help'] = '<img src="'.$fullPath.'" class="admin-preview" />';
        }

        $formMapper
            // ... other fields ...
            ->add('file', 'file', $fileFieldOptions)
        ;
    }
    // ...
}

2 个答案:

答案 0 :(得分:0)

您需要添加一些代码以在Symfony项目中包含CSS文件。类似于

的东西
{% stylesheets 'bundles/app/css/*' filter='cssrewrite' %}
  <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

然后你将教程中的以下CSS放入该文件中。

img.admin-preview {
  max-height: 200px;
  max-width: 200px;
}
  

您可以了解有关使用Symfony here包含CSS文件的更多信息。

答案 1 :(得分:0)

首先,你需要制作一个扩展SonataAdminBundle:CRUD:base_edit.html.twig的模板,这是一个例子:

    {# BlastBaseEntitiesBundle:CRUD:edit.html.twig #}

    {% extends 'SonataAdminBundle:CRUD:base_edit.html.twig' %}

    {# ... #}

然后在Resources / Public / css。

中创建你的css文件

执行命令bin/console assets:install将样式表发布到web / bundles目录。

  {# blastcore/css corresponds to BlastCoreBundle/Resources/Public/css and web/bundles/blastcore/js #}
    <link rel="stylesheet" href="{{ asset(blastcore/css/style.css) }}" />

http://symfony.com/doc/current/assetic/asset_management.html

现在你需要告诉sonata将你的模板用于你的管理员。 你可以在服务定义中做到这一点:

admin.yml

blast_base_entities.admin.search_index_entity:
        class: Blast\BaseEntitiesBundle\Admin\SearchIndexEntityAdmin
        arguments: [~, Blast\BaseEntitiesBundle\Entity\SearchIndexEntity, BlastCoreBundle:CRUD]
        tags:
            - name: sonata.admin
              manager_type: orm
              group: admin
              label: SearchIndexEntity
        calls:
        - [ setTemplate, [edit, BlastBaseEntitiesBundle:CRUD:edit.html.twig]]

https://sonata-project.org/bundles/admin/master/doc/reference/templates.html#crudcontroller-actions-templates