2017 © Pedro Peláez
 

symfony-bundle form-extension-bundle

Symfony Bundle to extend Form

image

armetiz/form-extension-bundle

Symfony Bundle to extend Form

  • Tuesday, May 21, 2013
  • by armetiz
  • Repository
  • 1 Watchers
  • 2 Stars
  • 168 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 19 % Grown

The README.md

ArmetizFormExtensionBundle

This bundle add a new Form type named "entity_ajax"., (*1)

It looks like the default "entity" type, but it loads only associated entities., (*2)

Example

A Book is link to User throught "owner" property., (*3)

If you are using the "entity" type on the BookType to display the "owner" property. The form will load all the "users" to render the page., (*4)

With the "entity_ajax" type, the form will load only the current "owner". In this case, you are free to load further "users" via AJAX or something else., (*5)

Installation

Installation is a quick 2 step process:, (*6)

  1. Download ArmetizFormExtensionBundle using composer
  2. Enable the Bundle

Step 1: Download ArmetizFormExtensionBundle using composer

Add ArmetizFormExtensionBundle in your composer.json:, (*7)

{
    "require": {
        "armetiz/form-extension-bundle": "1.x-dev"
    }
}

Now tell composer to download the bundle by running the command:, (*8)

``` bash $ php composer.phar update armetiz/form-extension-bundle, (*9)


Composer will install the bundle to your project's `vendor/armetiz` directory. ### Step 2: Enable the bundle Enable the bundle in the kernel: ``` php <?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Armetiz\FormExtensionBundle\ArmetizFormExtensionBundle(), ); }

Usage

You just have to use "entity_ajax" type instead of "entity". All EntityType options are still availabled and/or needed., (*10)

I'm using it with Chosen & [Ajax Chosen][3]., (*11)

``` php // src/Acme/TaskBundle/Controller/DefaultController.php namespace Acme\TaskBundle\Controller;, (*12)

use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; use Acme\TaskBundle\Entity\Task;, (*13)

class DefaultController extends Controller { public function newAction(Request $request) { $task = new Task();, (*14)

    $form = $this->createFormBuilder($task)
        ->add('task', 'text')
        ->add('dueDate', 'date')
        ->add('owner', 'entity_ajax')
        ->getForm();

    if ($request->isMethod('POST')) {
        $form->bind($request);
        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($task);
            $em->flush();

            return $this->redirect($this->generateUrl('task_success'));
        }
    }

    return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
        'form' => $form->createView(),
    ));
}

}, (*15)


``` js // part of edit.html.twig file var ajaxChosenSimplifier = function(selector, url, label) { var options = { method: 'GET', url: url, data: { method: "search" }, jsonTermKey: "value", dataType: 'xml' }; var success = function(data, textStatus, jqXHR) { var jSearched = $(data); var result = {}; jQuery.each(jSearched.find("item"), function(indexInArray, item) { var jItem = $(item); var id = jItem.find("id").text(); var text = jItem.find(label).text(); result[id] = text; }); return result; }; return $(selector).ajaxChosen(options, success); }; ajaxChosenSimplifier("#task_owner", "http://api.domain.tld/user, "username");

xml <!-- data content example --> <response status="success" message="user.search"> <item key="0" id="3" type="user"> <id>3</id> <username><![CDATA[ john ]]></username> </item> <item key="0" id="4" type="user"> <id>4</id> <username><![CDATA[ iron man ]]></username> </item> </response>, (*16)

The Versions

21/05 2013