2017 © Pedro Peláez
 

symfony-bundle checkbox-list-bundle

Type Checkbox-list for symfony-form.

image

it-blaster/checkbox-list-bundle

Type Checkbox-list for symfony-form.

  • Monday, March 21, 2016
  • by 0x2f8f
  • Repository
  • 6 Watchers
  • 0 Stars
  • 93 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

CheckboxListBundle

Build Status Scrutinizer Code Quality, (*1)

Symfony2 bundle. Type "checkbox-list" for symfony-form., (*2)

Installation

Добавьте ItBlasterCheckboxListBundle в composer.json:, (*3)

{
    "require": {
        "it-blaster/checkbox-list-bundle": "dev-master"
    },
}

Теперь запустите композер, чтобы скачать бандл командой:, (*4)

``` bash $ php composer.phar update it-blaster/checkbox-list-bundle, (*5)


Композер установит бандл в папку проекта `vendor/it-blaster/checkbox-list-bundle`. Далее подключите бандл в ядре `AppKernel.php`: ``` php <?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new ItBlaster\CheckboxListBundle\ItBlasterCheckboxListBundle(), ); }

В app/config/config.yml необходимо подключить шаблон виджета checkbox_list: ``` bash twig: form: resources: - 'ItBlasterCheckboxListBundle:Form:checkbox_list_widget.html.twig', (*6)

assetic: bundles: - 'ItBlasterAttachFileBundle', (*7)


Usage ------- Разберём использование виджета `checkbox_list` на примере 2х сущностей 'Contact' и 'ContactGroup'. В форме редактирования группы контактов добавляем виджет и вспомогательные методы: ``` php class ContactGroupAdmin extends Admin { protected $contact_choices = array(); /** * @param FormMapper $formMapper */ protected function configureFormFields(FormMapper $formMapper) { $formMapper ->tab('Атрибуты') ->with('Атрибуты', ['class'=>'col-md-6']) ->add('Slug') ->add('formContacts', 'checkbox_list', array( 'label' => 'Контакты:', 'foreign_objects' => $this->getContactForeignObjects(), 'choices' => $this->contact_choices, 'filter_add_foreign_object' => $this->getFilterAddContact(), 'foreign_object_model' => 'contact', 'bundle_alias' => 'app_main', )) ... ->end() ->end() ; } /** * Привязанные контакты * * @return array */ protected function getContactForeignObjects() { $object = $this->getSubject(); if($object) { $foreign_objects = ContactQuery::create() ->filterByGroupId($object->getId()) ->_or() ->filterByGroupId(NULL) ->find(); } else { $foreign_objects = ContactQuery::create() ->filterByGroupId(NULL) ->find(); } $choices = array(); foreach ($foreign_objects as $foreign_object) { $email = $foreign_object->getEmail() ? $foreign_object->getEmail() : 'не указан'; $phone = $foreign_object->getPhone() ? $foreign_object->getPhone() : 'не указан'; $label = 'Email: '.$email.', Телефон: '.$phone; $choices[] = array( 'id' => $foreign_object->getId(), 'label' => $label, 'checked' => $foreign_object->getGroupId() ); $this->contact_choices[$foreign_object->getId()] = $label; } return $choices; } /** * Парметры фильтра для добавления контакта с выставленным текущей группой * * @return array */ protected function getFilterAddContact() { $filter = array(); $object = $this->getSubject(); if ($object->getId()) { $filter = array( 'filter[Group][type]' => '', 'filter[Group][value]' => $object->getId() ); } return $filter; } /** * После создания объекта * * @param mixed $object * @return mixed|void */ public function postPersist($object) { $object->updateContacts(); } /** * После создания объекта * * @param mixed $object * @return mixed|void */ public function postUpdate($object) { $object->updateContacts(); } ... }

И в модель ContactGroup добавляем следующие методы: ``` php class ContactGroup extends BaseContactGroup { protected $form_contacts = NULL;, (*8)

/**
 * Привязанные контакты
 * Используется только в форме CMS
 *
 * @return null
 */
public function getFormContacts()
{
    return $this->form_contacts;
}

/**
 * Привязанные контакты
 * Используется только в форме CMS
 *
 * @param mixed $form_contacts
 */
public function setFormContacts($form_contacts)
{
    $this->form_contacts = $form_contacts;
}

/**
 * Обновляем привязанные контакты
 * Используется только в форме CMS
 */
public function updateContacts()
{
    $object_list = $this->getFormContacts();
    if ($object_list !== NULL) {
        //затираем старые значения
        ContactQuery::create()
            ->filterByGroupId($this->getId())
            ->update(array('GroupId' => NULL));

        //выставляем новые
        if (is_array($object_list) && count($object_list)) {
            ContactQuery::create()
                ->filterById($object_list)
                ->update(array('GroupId' => $this->getId()));
        }
    }
}

} ```, (*9)

Credits

It-Blaster it-blaster@yandex.ru, (*10)

The Versions

21/03 2016

dev-master

9999999-dev https://github.com/it-blaster/checkbox-list-bundle

Type Checkbox-list for symfony-form.

  Sources   Download

MIT

The Requires

 

by IT-Blaster

form symfony checkbox type foreign

10/03 2015

v1.0.0

1.0.0.0 https://github.com/it-blaster/checkbox-list-bundle

Type Checkbox-list for symfony-form.

  Sources   Download

MIT

The Requires

 

by IT-Blaster

form symfony checkbox type foreign