bigfoot/core-bundle

Bigfoot 核心包

安装次数: 14,266

依赖项: 11

建议者: 0

安全: 0

星标: 1

关注者: 15

分支: 5

公开问题: 1

类型:symfony-bundle

2.2.2 2015-01-20 09:38 UTC

README

这是 Bigfoot 管理界面的核心包。提供核心功能和助手,通过包来集成 BackOffice 功能。

安装

使用 composer

php composer.phar require bigfoot/core-bundle

在您的 app/AppKernel.php 文件中注册此包

$bundles = array(
    ...
    new Bigfoot\Bundle\CoreBundle\BigfootCoreBundle(),
    ...
);

使用方法

管理界面现在可在 /admin 下访问。目前什么也不做。添加 Bigfoot 包或创建您自己的包来真正开始!

如何创建小部件

创建一个继承自 Bigfoot\Bundle\CoreBundle\Model\AbstractWidget 的类。在您的新类中定义方法 'renderContent()'。此方法必须返回您小部件的 HTML 代码。

在 widget_backoffice 表中添加一条记录,并使用相应的值:名称:类的全名,标题:小部件头部显示的标题,此字段是可翻译的

在 widget_backoffice_parameter 表中添加 2 条记录。一条记录的值如下:名称:order,值:您希望小部件显示的顺序号,widget_id:widget_backoffice 表中您的小部件的记录 ID,user_id:(可选)如果定义,此参数将仅为此用户使用

另一条记录的值如下:名称:width,值:小部件使用的列数,widget_id:widget_backoffice 表中您的小部件的记录 ID,user_id:(可选)如果定义,此参数将仅为此用户使用

如何覆盖 Symfony 路由器

将以下行添加到您的前端配置中

bigfoot_core:
    routing:
        replace_symfony_router: true
        routers_by_id:
            router.default :     300
            bigfoot_core.router: 400

BigfootFile 注解

BigfootFile 使用 symfony 的文件上传系统,具有一个文件的两个属性。

@Bigfoot\Bundle\CoreBundle\Annotation\Bigfoot\File:将此注解应用于表示表单字段的属性。使用其 filePathProperty 选项(必需)来连接另一个属性。

不要忘记创建一个 "updated" 字段,并在使用 PreFlush 监听器更新之前更新它。否则,如果表单中没有其他更改,文件将不会更新。

示例

<?php
namespace Entity;

use Doctrine\ORM\Mapping as ORM;
use Bigfoot\Bundle\CoreBundle\Annotation\Bigfoot;

/**
 * @ORM\Table(name="items")
 * @ORM\HasLifecycleCallbacks()
 */
class Item
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     * @ORM\Column(name="path", type="string", length=255, nullable=true)
     */
    private $path

    /**
     * @Assert\File(maxSize="6000000")
     * @Bigfoot\File(filePathProperty="path")
     */
    public $file;

    /**
     * @var string
     * @ORM\Column(name="updated", type="datetime", nullable=true)
     */
    private $updated;

    /**
     * @ORM\PreFlush()
     */
    public function refreshUpdated() {
        if ($this->file) {
            $this->updated = new \DateTime("now");
        }
    }

}

在您的表单中使用它

class ItemType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('file', 'bigfoot_file', array(
            'required'         => false,
            'label'            => 'Your file',
            'filePathProperty' => 'path',
            'deleteRoute'      => 'entity_delete_file'
        ));
    }
}

如果您没有定义任何删除路由,则不会显示删除链接

在前端获取文件

第二个参数(默认为 false)定义了过滤器是否返回绝对路径

{{ item|bigfoot_file('path', false) }}

在 CRUD 列表页面生成 CSV

将方法 getCsvFields 添加到您扩展的 CrudController 控制器中

protected function getCsvFields()
{
    return array(
        'name' => array(
            'label' => 'Name'
        ),
        'region.name' => array(
            'label'    => 'Region',
        ),
        'services.codeDetail' => array(
            'label'    => 'Services',
            'multiple' => true
        )
    );
}

如果您想显示实体字段,请使用

protected function getCsvFields()
{
    return array(
        'name' => array(
            'label' => 'Name'
        ),
        ....

如果您想显示外部实体字段,请使用

protected function getCsvFields()
{
    return array(
        'region.name' => array(
            'label'    => 'Region'
        ),
        ....
    );

如果您想显示 OneToMany 关系字段,请使用

protected function getCsvFields()
{
    return array(
        'services.codeDetail' => array(
            'label'    => 'Services',
            'multiple' => true
        )
        ....
    );

通过按标签设置表单来提高 '编辑表单' 的速度

将方法 getFormTypes 添加到您扩展的 CrudController 控制器中,它返回一个包含数组的数组,其中包含 'label'(标签的标签)和 'form'(FormType 服务的名称)。

protected function getFormTypes()
{
    return array(
        array(
            'label' => 'Hotel', // Label of the first tab
            'form'  => 'rc_hotel_0' // Service name of the HotelType
        ),
        array(
            'label' => 'Rooms', // Label of the second tab
            'form'  => 'rc_hotel_1' // Service name of the RoomsType
        )
    );
}

确保您已将索引参数添加到控制器的 editAction 中

public function editAction(Request $request, $id, $index = null)
{
    return $this->doEdit($request, $id, $index);
}

就是这样!