在symfony 2.0中,如何使用表单中的一对一关联创建下拉列表?你们能举好榜样吗?
我有以下Symfony2表单:
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('submitter_is_home', 'choice', array(
'expanded' => true,
'choices' => array('1' => 'Home', '' => 'Away'),
'data' => '1',
))
;
}
Run Code Online (Sandbox Code Playgroud)
(为清楚起见,我省略了其他字段.)
当我在浏览器中访问此表单时,未选中"主页"选项.我也检查了源代码,看起来也没有设置正确的属性.
对于单选按钮,默认值的工作方式与其他类型的choice字段的工作方式不同吗?这可能会发生什么?
访问我的路线/message/new我将显示一个表单,用于向一个或多个客户发送新消息.表单模型包含(以及其他)Customer实体集合:
class MyFormModel
{
/**
* @var ArrayCollection
*/
public $customers;
}
Run Code Online (Sandbox Code Playgroud)
我想使用GET参数实现自动客户选择customers,如下所示:
message/new?customers=2,55,543
Run Code Online (Sandbox Code Playgroud)
现在只需拆分,并进行查询即可获得客户:
public function newAction(Request $request)
{
$formModel = new MyFormModel();
// GET "customers" parameter
$customersIds = explode($request->get('customers'), ',');
// If something was found in "customers" parameter then get entities
if(!empty($customersIds)) :
$repo = $this->getDoctrine()->getRepository('AcmeHelloBundle:Customer');
$found = $repo->findAllByIdsArray($customersIds);
// Assign found Customer entities
$formModel->customers = $found;
endif;
// Go on showing the form
} …Run Code Online (Sandbox Code Playgroud) 我有一个自定义表单字段类型和相关的表单主题.在一个页面上,我有很多这些领域,但我特别想改变其中一个领域.
有没有办法以不同方式对同一类型(和同一文件)中的某些字段进行主题化?
一个简化的例子:
form_fields.html.twig :(本地主题文件)
{% block my_dropdown_row %}
<div>
{{ form_label(form) }}
{{ form_widget(form) }}
{{ form_errors(form) }}
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
在我的表单模板中(所有这些字段具有相同的类型 - my_dropdown
{{ form_row(form.selectionA) }}
{{ form_row(form.selectionB) }}
{{ form_row(form.selectionC) }}
{{ form_row(form.final_selection) }}
Run Code Online (Sandbox Code Playgroud)
如何将最终字段的样式与其他字段区分开来?这些小部件中有很多代码,因此重复性越低越好.
我目前正在尝试使用symfony表单来处理我的帖子并放入rest api端点.
目前我有:
$request = $this->getRequest();
$cc = new CreditCard();
$form = $this->createForm(new CreditCardType(), $cc);
$form->handleRequest($request);
if ($form->isValid()) {
//...
}
Run Code Online (Sandbox Code Playgroud)
但是,表单永远不会有效.查看问题,似乎表单的isSubmitted字段为false,因此它永远不会通过验证.此外,由于这是一个api调用,我在creditcardtype中将csrf_protection设置为false.
以下是我向用户提交的数据的示例:
{
"credit_card": {
"name" : "Example Name"
...
}
}
Run Code Online (Sandbox Code Playgroud)
如何将此post/put请求注册为已提交并且表单验证者通过?谢谢.
我有一个表格如下:
class AdminEmployerForm extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('firstName', 'text')
->add('user', new AdminUserForm());
}
}
class AdminUserForm extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('username', 'text')
->add('email', 'text');
}
}
Run Code Online (Sandbox Code Playgroud)
我在控制器中调用AdminEmployerForm,我想从AdminEmployerForm中删除AdminUserForm的电子邮件字段:
$form = $this->createForm(new AdminEmployerForm, $employer);
//i want to do something like $form->remove('email')
Run Code Online (Sandbox Code Playgroud)
如何使用$ form-> remove()删除嵌入式表单中的字段?是否可以从控制器中删除嵌入式表单的字段?
我正在使用Symfony表单(v3.0)而没有Symfony框架的其余部分.使用Doctrine v2.5.
我创建了一个表单,这里是表单类型:
class CreateMyEntityForm extends BaseFormType {
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add('myEntity', EntityType::class);
}
}
Run Code Online (Sandbox Code Playgroud)
加载页面时,我收到以下错误.
传递给Symfony\Bridge\Doctrine\Form\Type\DoctrineType :: __ construct()的参数1必须是Doctrine\Common\Persistence\ManagerRegistry的实例,没有给出,在/ var/www/dev3/Vendor/symfony/form中调用/FormRegistry.php在第85行
我相信有一些配置需要在这里实现,但我不知道如何创建一个实现ManagerRegistryInterface的类 - 如果这是正确的事情.
有什么指针吗?
编辑 - 这是我设置Doctrine的代码
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Tools\Setup;
class Bootstrap {
//...some other methods, including getCredentials() which returns DB credentials for Doctrine
public function getEntityManager($env){
$isDevMode = $env == 'dev';
$paths = [ROOT_DIR . '/src'];
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, null, null, false);
$dbParams = $this->getCredentials($env);
$em = EntityManager::create($dbParams, $config);
return $em;
}
}
Run Code Online (Sandbox Code Playgroud) Symfony MoneyType字段呈现input type="text"允许用户在字段中键入他们想要的内容.
如何覆盖此渲染,input type="number"以便用户只能输入数字字符?
$formBuilder->add("amount", MoneyType::class, [
'currency' => 'USD'
]);
Run Code Online (Sandbox Code Playgroud)
当前输出:
<div><label for="form_amount" class="required">Amount</label>$ <input type="text" id="form_amount" name="form[amount]" required="required" /></div>Run Code Online (Sandbox Code Playgroud)
我想要实现的目标:
<div><label for="form_amount" class="required">Amount</label>$ <input type="number" id="form_amount" name="form[amount]" required="required" /></div>Run Code Online (Sandbox Code Playgroud)
我试图简单地覆盖属性类型,但所有这一切都是在最后添加第二个type属性,这不起作用,因为它显然是无效的HTML.
$formBuilder->add("amount", MoneyType::class, [
'attr' => [
'type' => 'number',
],
'currency' => 'USD'
]);
Run Code Online (Sandbox Code Playgroud)
这是我简单的树枝:
{{ form_start(form) }}
{{ form_widget(form) }}
<input type="submit" />
{{ form_end(form) }}
Run Code Online (Sandbox Code Playgroud)
我也很好奇,为什么这是Money的默认输入类型?我正在考虑扩展或修改课程以适应这一点,但我确信有一些我没有看到的优势.
我正在努力在我的网站上上传.pdf文件.
我创建了一个实体,其中包含字符串中文件的名称.有实体映射:
<field name="pdf" type="string" column="pdf" length="200" nullable="true"/>
Run Code Online (Sandbox Code Playgroud)
我输入文件的表单:
$builder
->add('pdf', FileType::class, array('label' => 'Fiche de paie'))
/* other input */
;
Run Code Online (Sandbox Code Playgroud)
我的表格观点:
{{ form_start(form) }}
{{ form_row(form._token) }}
<div class="modal-body row">
<div class="col-md-6 col-sm-8">
/* other input */
{{ form_row(form.pdf) }}}
</div>
<div class="col-md-6 col-sm-8">
/* other input */
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-info" id="save">{% trans %}Save{% endtrans %}</button>
</div>
{{ form_end(form, { 'render_rest': false } ) }}
Run Code Online (Sandbox Code Playgroud)
还有控制器:
if ($form->isSubmitted() && $form->isValid()) {
$pdf = …Run Code Online (Sandbox Code Playgroud) 我有这个观点:
//login.html.twig
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MY APP</title>
</head>
<body>
<form action="{{ path('conection') }}" method="post" name="formulario_login">
<label for="username">User:</label>
<input type="text" id="username" name="_username" value="{{ last_username|default('') }}" />
<br />
<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
<br />
<input type="checkbox" id="remember_me" name="_remember_me"/>
<label for="remember_me">Remember me</label>
<br />
<input type="submit" name="login" value="Login" />
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在我的路由文件中:
conection:
pattern: /conection
defaults: { _controller: UserBundle:Default:conection}
Run Code Online (Sandbox Code Playgroud)
而我的控制器
<?php
namespace myApp\UserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller
{ …Run Code Online (Sandbox Code Playgroud) symfony ×10
symfony-forms ×10
php ×4
doctrine-orm ×2
symfony-2.1 ×2
symfony-2.3 ×2
twig ×2
currency ×1
doctrine ×1
one-to-one ×1