jo/entityformmanager
Composer 安装命令:
composer require jo/entityformmanager
包简介
Entity form manager for nette forms
README 文档
README
Tested on nette kdyby doctrine
Description
Functions :
- register form fields to nette form
- fill form field labels
- create entity from form data
- modify entity by form data
- create entity form associated fields
- fill form from entity - Used in edit form
- automatically generate required field text by tpl " some str %caption% ... "
field registration
Rules
- @ORM\ManyToOne(targetEntity="Entity\Company\CompanyProduction") for associated entity fields register select box.
- @ORM\Column(type="date") - register date column
- @ORM\Column(type="text") - regiter text area
- @ORM\Column(type="boolean") - register check box
- other - register input text
Automatically generated from labels by #formLabel="some label"
**
* #formLabel="materiál" UI form label
*
* @ORM\ManyToOne(targetEntity="\Entity\Jobs\Material")
* @ORM\JoinColumn(name="material_id",referencedColumnName="id",nullable=false,onDelete="CASCADE")
*
*/
interface description
/**
* Creates entity and fill fomm values
* @param array $excludeInputs
* @param \Nette\Forms\Container $container
* @return object Entity
*/
public function createEntityFromForm($excludeInputs = array(), \Nette\Forms\Container $container = null)
/**
* Register form fields by entity.
* For associed fileds creates input select
* For boolean fields creates checkbox
* For datetime fields try call addDatePicker for show date picker
* For other columns creates input text
*
* @param array $exclude
* @param bool $itemsIsWhitelist - determine wheter items are white list or blacklist
* @param \Nette\Forms\Container $container If given, fields will be registered into container
* @param bool $autoRequire - allow automatically set required fields with message (EntityFormManager::setRequiredMsgTpl())
*/
public function createFields($items = array(), $itemsIsWhitelist = false, \Nette\Forms\Container $container = null,$autoRequire=false)
/**
* Fill entity by form values
* Attention - Fill only fields which has noassociation and scalar values
*
* @param object $entity
* @param array $excludeInputs
* @return object Entity
*/
public function fillEntityFromForm($entity, $excludeInputs = array(), \Nette\Forms\Container $container = null)
/**
* Fill form values from given entity.
*
* Accept
* - scalar values
* - \DateTime object
* Other typs are skipped and form fileds not filled
*
* @param object $entity
* @param \Nette\Forms\Container $container
* @param bool $fillAssoc fill fields with association
* @param string $locale - locale for \DateTime object. Example cs_CZ|en_US|sk_SK|hu_HU ...
*
*/
public function fillFormFromEntity($entity, \Nette\Forms\Container $container = null, $fillAssoc = true, $locale = 'cs_CZ')
/**
* Fill form field with association to other entity.
* Usage for example on selectbox, id will filled form given entity.
* Given entity class will be checked oposite to associated target entity.
* On target entity is called method getId()
*
* @param string $elementName
* @param object $entity - doctrine entity
* @param \Nette\Forms\Container $container
*/
public function fillFormFromEntityAssoc($elementName,$entity, \Nette\Forms\Container $container = null)
/**
*
* @param string $elementName
* @param \Nette\Forms\Container $container
* @return type
*/
public function getElementValue($elementName,\Nette\Forms\Container $container=null)
/**
* Return target entity instance of associated property.
* Value of form (or Container) element is used as id of target entity.
* Internaly use EntityManager::find(targetEnityClass,elemet::getValue())
*
* @param string $elementName
* @param \Nette\Forms\Container $container
* @return type
*/
public function getEntityFromAssoc($elementName, \Nette\Forms\Container $container = null)
/**
*
* @param string $prefix
* @param array $exclude
*/
public function getFormCols($exclude = array())
/**
* Return form or container element
* @param string $elementName - element name without prefix
* @param \Nette\Forms\Container $container
* @return \Nette\Forms\Controls\BaseControl
*/
public function getFormElement($elementName,\Nette\Forms\Container $container=null)
/**
* Set value of form element
* @param string $elementName - element name without prefix
* @param mixed $value
* @param \Nette\Forms\Container $container
* @return \JO\Nette\Doctrine\EntityFormManager
*/
public function setElementValue($elementName,$value,\Nette\Forms\Container $container=null)
/**
* Template for reuired fields
*
* @param string $requiredTpl - " some str %_caption_% ... "
* @return \JO\Nette\Doctrine\EntityFormManager
*/
public function setRequiredMsgTpl($requiredTpl)
Form manager and form builder Example
Doctrine entity
/**
* Surcharge fro material
*
* @ORM\Entity(repositoryClass="MaterialSurchargeRepository")
* @ORM\Table(name="`jobsMaterialSurcharge`")
*
*
* @author Jan Oliva
*/
class MaterialSurcharge extends \Entity\BaseEntity
{
/**
* #formLabel="materiál"
* @ORM\ManyToOne(targetEntity="\Entity\Jobs\Material")
* @ORM\JoinColumn(name="material_id",referencedColumnName="id",nullable=false,onDelete="CASCADE")
*
*/
protected $material;
/**
* #formLabel="přirážka %"
* @ORM\Column(type="float",nullable=false)
*/
protected $surcharge;
/**
* #formLabel="firma"
* @ORM\ManyToOne(targetEntity="Entity\Company\CompanyProduction")
* @ORM\JoinColumn(name="companyProduction_id",referencedColumnName="id",nullable=false)
*
*/
protected $companyProduction;
/**
* #formLabel="poznámka"
* @ORM\Column(type="text",nullable=true)
*/
protected $note;
}
Form builder class
<?php
use JO\Nette\Application\UI\FormBootstrapRenderer;
use JO\Nette\Application\UI\FormFactory;
use JO\Nette\Doctrine\EntityFormManager;
/**
* Description of FormBuilder
*
* @author Jan Oliva
*/
class FormBuilder extends FormFactory
{
public function registerFields()
{
//instance of form manager
$man = new EntityFormManager($this->form,'\Entity\Jobs\MaterialSurcharge, $this->context->EntityManager);
//register fields of entity
$man->createFields(array('surcharge','companyProduction','note'), $itemsIsWhitelist=true,$container=null,$autoRequire=true);
$man->getFormElement('surcharge')
->addRule(\Nette\Forms\Form::FLOAT,"Vyplňte pole přirážka % prosím");
//get form element by form manager
$companySelect = $man->getFormElement('companyProduction');
/* @var $companySelect \Nette\Forms\Controls\SelectBox */
$companySelect
->setRequired("Vyber firmu");
return $this->getForm();
}
}
Presenter
use JO\Nette\Application\UI\FormBootstrapRenderer;
use JO\Nette\Application\UI\FormFactory;
use JO\Nette\Doctrine\EntityFormManager;
/**
*
* @var EntityFormManager
*/
protected $formManager;
protected $entityName = '\Entity\Jobs\MaterialSurcharge';
protected function createComponentMaterialSurchargeForm($name)
{
$builder = new FormBuilder($this->context, new Form($this, $name));
$form = $builder->registerFields();
return $form;
}
public function actionAdd($material_id=null)
{
$form = $this->getComponent('materialSurchargeForm');
/* @var $form Form */
//create instance of entity form manager
$this->formManager = new EntityFormManager($form, $this->entityName, $this->entityManager);
$form->addSubmit(FormBuilder::SUBMIT_ADD, "add surcharge")
->onClick[] = callback($this,'add');
some other code
}
/**
* Form callback
* Create entity from form data and save entity
*/
public function add(SubmitButton $button)
{
//create entity of asscociated field by association metadata of entity
$company = $this->formManager->getEntityFromAssoc('companyProduction',$button->getForm());
/* @var $company \Entity\Company\CompanyProduction */
//create entity from submited form
$surcharge = $this->formManager->createEntityFromForm();
/* @var $surcharge MaterialSurcharge */
$surcharge
->setMaterial($material)
->setCompanyProduction($company);
//save entity now
}
```
jo/entityformmanager 适用场景与选型建议
jo/entityformmanager 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 129 次下载、GitHub Stars 达 1, 最近一次更新时间为 2014 年 11 月 03 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「doctrine」 「Forms」 「nette」 「entity」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 jo/entityformmanager 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 jo/entityformmanager 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 jo/entityformmanager 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
ConfirmationField is a form field for Atk14 applications. It's like the BooleanField (checkbox) but the ConfirmationField must be ticked.
Field for number with restricted count of digits and decimal places
HTML and form generation
Nette Framework adapter for I18n package
Build forms from schema
A Laravel Filament Forms slug field.
统计信息
- 总下载量: 129
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 12
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: proprietary
- 更新时间: 2014-11-03