swoopaholic/components

swoopaholic 组件集合

0.2.1 2015-10-29 10:04 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:25:50 UTC


README

此组件包用于解耦逻辑与视图渲染。使用与渲染无关的代码,可以创建更灵活地使用不同模板或前端模板(如mustache)的方式。

使用方法

即将到来...

目前,要启用表格组件的依赖注入

在 BundleNameExtension 类中

$tableLoader = new Loader\XmlFileLoader($container, new FileLocator($container->getParameter('kernel.root_dir') . '/../vendor/swoopaholic/components/Swoopaholic/Component/Table/Resources/config'));
$tableLoader->load('twig.xml');
$tableLoader->load('table.xml');

在 Bundle 类中

...
use Swoopaholic\Component\Table\Extension\DependencyInjection\Compiler\TablePass;
use Swoopaholic\Component\Table\Extension\DependencyInjection\Compiler\TableTemplatePass;
...
public function build(ContainerBuilder $container)
{
    $container->addCompilerPass(new TablePass());
    $container->addCompilerPass(new TableTemplatePass());
}

定义 CRUD 表格

<?php
namespace Namespace\Bundle\MyBundle\CrudTable;

use Swoopaholic\Component\Table\Extension\Crud\Type\TableType;
use Swoopaholic\Component\Table\TableBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class UserType extends TableType
{
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        parent::setDefaultOptions($resolver);
        $resolver->setRequired(array('data'));
    }

    public function buildTable(TableBuilderInterface $builder, array $options)
    {
        $this
            ->addColumn('username', 'text', array('label' => 'Naam', 'sort' => 'username'))
            ->addColumn('email', 'text', array('label' => 'E-mail', 'sort' => 'email'))
            ->addColumn('enabled', 'text', array('label' => 'Enabled'))
            ->addColumn('last_login', 'datetime', array('label' => 'Ingelogd op', 'sort' => 'lastLogin'));

        parent::buildTable($builder, $options);
    }

    public function buildRowActions($builder, $cell, $item, array $options)
    {
        $group = $builder->create('group', 'crud_action_group', array());
        $group->add('show', 'crud_action', array(
            'icon' => 'eye-open',
            'url' => $this->router->generate('nvs_framework_user_show', array('id' => $item->getId())),
            'label' => 'Bekijken',
            'attr' => array('data-rowclick' => '')
        ));

        $group->add('edit', 'crud_action', array(
            'icon' => 'eye-open',
            'url' => $this->router->generate('nvs_framework_user_edit', array('id' => $item->getId())),
            'label' => 'Bewerken',
            'attr' => array('data-rowclick' => '')
        ));

        $cell->add($group);
    }

    public function getParent()
    {
        return 'table';
    }

    public function getName()
    {
        return 'user';
    }
}

要使用新的 CRUD 表格,在控制器/操作中

$data = $this->getData()
$tableFactory = $this->get('table.factory');

$table = $tableFactory->create(
    'user',
    $data,
    array('table_route' => $route, 'responsive' => true)
);