armetiz / form-extension-bundle
此包已被废弃,不再维护。未建议替代包。
Symfony Bundle 扩展 Form
dev-master / 1.x-dev
2013-05-21 15:55 UTC
Requires
- php: >=5.3.2
- symfony/symfony: >=2.1.0
Requires (Dev)
- doctrine/dbal: ~2.2
- doctrine/orm: ~2.2,>=2.2.3
- symfony/dependency-injection: ~2.0
- symfony/form: >=2.2,<2.4-dev
- symfony/stopwatch: >=2.2,<2.4-dev
This package is not auto-updated.
Last update: 2022-02-01 12:22:21 UTC
README
此包添加了一个名为 "entity_ajax" 的新 Form 类型。
它看起来像默认的 "entity" 类型,但它只加载关联实体。
示例
一本书通过 "owner" 属性链接到 User。
如果你在 BookType 上使用 "entity" 类型来显示 "owner" 属性。表单将加载所有 "users" 来渲染页面。
使用 "entity_ajax" 类型,表单将只加载当前 "owner"。在这种情况下,你可以自由地通过 AJAX 或其他方式加载更多的 "users"。
安装
安装是快速的两步过程
- 使用 composer 下载 ArmetizFormExtensionBundle
- 启用 Bundle
步骤 1: 使用 composer 下载 ArmetizFormExtensionBundle
在 composer.json 中添加 ArmetizFormExtensionBundle
{ "require": { "armetiz/form-extension-bundle": "1.x-dev" } }
现在告诉 composer 下载包,运行以下命令
$ php composer.phar update armetiz/form-extension-bundle
Composer 将将包安装到项目的 vendor/armetiz
目录。
步骤 2: 启用 Bundle
在内核中启用 Bundle
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Armetiz\FormExtensionBundle\ArmetizFormExtensionBundle(), ); }
用法
只需使用 "entity_ajax" 类型代替 "entity"。所有 EntityType 选项仍然可用和/或需要。
我在 Chosen & Ajax Chosen 中使用它。
// src/Acme/TaskBundle/Controller/DefaultController.php namespace Acme\TaskBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; use Acme\TaskBundle\Entity\Task; class DefaultController extends Controller { public function newAction(Request $request) { $task = new Task(); $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(), )); } }
// 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");
<!-- 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>