swoopaholic/components

Collection of swoopaholic components

0.2.1 2015-10-29 10:04 UTC

This package is not auto-updated.

Last update: 2024-04-13 14:07:52 UTC


README

This bundle of components is used for decoupling logic with view rendering. Using code independent of rendering creates as more flexible way of using different templates or even front-end templates like mustache.

Usage

Will be here soon...

For now, to enable dependency injectino for the table component:

in the BundleNameExtension class:

$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');

in the Bundle class

...
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());
}

To define the crud table:

<?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';
    }
}

To use the new crud table, in the controller/action:

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

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