标签: symfony-forms

使用Symfony Forms,Twig和SymfonyTwigBridge时,如何覆盖默认模板?

我在Silex应用程序中使用Symfony和Twig.

我有一个表格的注册页面:

{% extends "base.twig" %}

{% block title %}Welcome to My Example site{% endblock %}
{% block head %}
{{ parent() }}
{% endblock %}
{% block content %}

<div class="row">
<div class="span12">
    <h2>Register</h2>
    <p>
        Register for this site and we'll give you free access to cool stuff
        in addition you can subscribe to our premium content.
    </p>

    <form  action="{{app.config.site.secureUrl}}/register-handler" method="post">
        <fieldset >
            {{ form_widget(form) }}
            <button type="submit" class="btn btn-info">Send</button>
        </fieldset>
    </form>
</div>
</div>

</div>

{% endblock %}
Run Code Online (Sandbox Code Playgroud)

尝试呈现页面时出现以下错误: …

php symfony-forms twig silex

4
推荐指数
1
解决办法
5741
查看次数

Symfony2将上传的文件分配给内存

在Symfony中上传大于post_max_size的文件时,上传的文件将在内存中分配.

致命错误:第28行的/Applications/MAMP/htdocs/Symfony/vendor/symfony/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php中允许的内存大小为150994944字节(试图分配84627994字节)

为什么symfony试图在POST时将文件分配给内存?

1/php.ini

file_uploads = On
upload_tmp_dir = /Applications/MAMP/tmp/php
upload_max_filesize = 32M
post_max_size = 48M
Run Code Online (Sandbox Code Playgroud)

2 /控制器

<?php
//AcmeDemoBundle/Controller/DemoController
namespace Acme\DemoBundle\Controller;
use Symfony\Component\HttpFoundation\Request;

class DemoController extends Controller
{

public function createAction(Request $request)
{

    if ($request->getMethod() == 'POST')
    {
        if ($_FILES["file"]["size"] < 3000000 )//3Mb
        {
            if ($_FILES["file"]["error"] > 0)
            {
                echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
            }
            else
            {
                if (empty($_POST) && empty($_FILES) && isset($_SERVER['REQUEST_METHOD']) && strtolower($_SERVER['REQUEST_METHOD']) == 'post')
                {
                    echo "The file is …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony

4
推荐指数
1
解决办法
5148
查看次数

Silex + Twig:找不到form_widget(),即使安装了Symfony Bridge也是如此

我一直在关注以下资源的文档

http://silex.sensiolabs.org/doc/providers/form.html

但是我收到以下错误

Twig_Error_Syntax: The function "form_widget" does not exist in "layout.html.twig"
Run Code Online (Sandbox Code Playgroud)

我已经多次查看了文档和我的源代码,我仍然看不到我出错的地方,我错过了什么?我安装了Symfony Twig Bridge.

<?php
require_once __DIR__.'/vendor/autoload.php';

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Yaml\Parser;

use Silex\Provider\FormServiceProvider;

$app = new Silex\Application();
$app['debug'] = true;

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path'     => __DIR__. '/src/views',
    'twig.options'  => array(
        'debug' => true,
        'cache' => false
    ),
));

$app['twig']->addExtension(new Twig_Extension_Debug());

$app['yaml'] = new Parser();



//.....

$app->register(new FormServiceProvider());

$app->register(new Silex\Provider\ValidatorServiceProvider());



$site['name']  = 'My Site';
// More definitions for $site

$app->match('/', function() use($app, $site) { 
    return $app['twig']->render('layout.html.twig', $site);
})->method('POST|GET'); …
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony twig silex

4
推荐指数
1
解决办法
3927
查看次数

如何在symfony2中为实体ManyToOne关系嵌入表单?

我是Symfony 2 Framework的新手.我想形成实体ManyToOne关系的嵌入.我必须实体地址地址类型

地址实体

namespace Webmuch\ProductBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

class Address
{

    private $id;
    private $line1;
    private $city;
    private $zip;
    private $phone;

    /**
     * @var string $type
     *
     * @ORM\ManyToOne(targetEntity="AddressType")
     * @ORM\JoinColumn(name="address_type_id", referencedColumnName="id")
     */
    private $type;
}
Run Code Online (Sandbox Code Playgroud)

AddressType实体

namespace Webmuch\ProductBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

class AddressType
{
    private $id;
    private $title;
}
Run Code Online (Sandbox Code Playgroud)

地址控制器

namespace Webmuch\ProductBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Webmuch\ProductBundle\Entity\Address;
use Webmuch\ProductBundle\Form\AddressType;

/**
 * Address controller.
 * …
Run Code Online (Sandbox Code Playgroud)

php doctrine many-to-one symfony-forms symfony

4
推荐指数
1
解决办法
8772
查看次数

symfony2:将主题应用于集合类型的单个字段

将主题应用于表单字段很容易,例如:

{% form_theme form _self %}

{% block _product_name_widget %}
    {{ block('field_widget') }}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

但是如果表单字段是集合类型怎么办?例如: product['models'][1][comment我不知道如何定制它.(这可能是第一个问题)

更新: anwser here:Symfony2:带有data-prototype的集合表单字段类型

symfony-forms symfony

4
推荐指数
1
解决办法
3787
查看次数

symfony2获取实体的所有验证约束(yml,xml,annotations)

我试图获取实体的所有验证约束并将这些约束转换为Jquery验证规则,现在我能够获得注释定义的约束(感谢:Symfony2获得实体的验证约束),但是我在获取xml和yml时遇到了一些麻烦那些.

$xml_file_loader = new XmlFileLoader("path_to_my_project/vendor/friendsofsymfony/user-bundle\FOS\UserBundle\Resources\config\validation.xml");
Run Code Online (Sandbox Code Playgroud)

使用类似的代码意味着我需要事先知道xml/yml文件的位置,我试图以某种方式编写一个可以自动执行此操作的通用代码.

有没有办法立刻获得所有约束?如果不是我怎么知道xml/yml文件的位置,并且在继承的情况下我需要检查父约束...这可行吗?

symfony-forms symfony

4
推荐指数
1
解决办法
2557
查看次数

Symfony2选择字段不起作用

我在这里问了一个问题如何在FormType中使用Repository自定义函数但是没有人使用,所以我做了一点挖掘并提前了一点但我仍然得到这个错误:

Notice: Object of class Proxies\__CG__\Kpr\CentarZdravljaBundle\Entity\Category 
could not be converted to int in /home/kprhr/public_html/CZ_Symfony/vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/ChoiceList/ChoiceList.php line 457 
Run Code Online (Sandbox Code Playgroud)

现在这是我的CategoryType的样子:

<?php

namespace Kpr\CentarZdravljaBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Bridge\Doctrine\RegistryInterface;

class CategoryType extends AbstractType
{
    private $doctrine;

    public function __construct(RegistryInterface $doctrine)
    {
        $this->doctrine = $doctrine;
    }
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Kpr\CentarZdravljaBundle\Entity\Category',
            'catID' => null,
        ));
    }
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $someId = $builder->getData()->getId();
        $param = ($someId) ? $someId : 0;
        $catID = $options['catID']; …
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony

4
推荐指数
1
解决办法
9060
查看次数

Symfony2表单BooleanToStringTransformer问题

我有一个布尔字段,我把它作为一个选择字段放在一个表单中(是或否).没有数据转换器,我会得到0或1.我添加了一个视图BooleanToStringTransformer(看起来合理):

$builder
        ->add(
            $builder->create('myBooleanField', 'choice', array(
                'choices' => array(true => 'Yes', false => 'No'),
            ))
            ->addViewTransformer(new BooleanToStringTransformer('1'))
        )
Run Code Online (Sandbox Code Playgroud)

当我尝试显示表单时,我收到错误"Expected a Boolean.".在创建表单之前,我的字段设置为false.

我试图将它设置为模型转换器:表单被调度,但是当我提交它时,我的字段被声明为无效.

我究竟做错了什么?

编辑:我差不多了.

  • 我使用模型变换器而不是视图变换器(选择字段使用字符串或整数,而不是布尔值)
  • 我将选择列表从更改array(true => 'Yes', false => 'No')array('yes' => 'Yes', 'no' => 'No')

所以代码现在看起来像 ->addModelTransformer(new BooleanToStringTransformer('yes'))

数据转换工作,除了我的字段始终设置为true,无论我选择什么值.

怎么了?

forms symfony-forms symfony symfony-2.3

4
推荐指数
1
解决办法
6254
查看次数

如何在实体表单中包含来自另一个实体的某些字段?

我想在一种形式中使用来自少数实体的字段,我可以这样做吗?例如,我想surnameProfileType类型和name字段中添加一个表单字段CountryType.这个字段必须是一个简单的字符串(text).

我该怎么做?谢谢!

注意:我不能使用实体类型,因为Symfony只提供复选框,单选按钮选择它,但是我需要使用一个简单的文本字段.

php symfony-forms symfony doctrine-orm

4
推荐指数
1
解决办法
5819
查看次数

在TWIG中渲染控制器并显示表单错误

我有indexAction和contactAction

contactAction是一个简单的表单,没有映射字段(FormType),如下所示:

/**
 * @Route("/contact", name="contact")
 * @Template()
 * @param Request $request
 * @return array
 */
public function contactAction(Request $request)
{
    $form = $this->createForm(new ContactType());

    $form->handleRequest($request);

    if ($form->isValid()) {
        $firstName = $form->get('first_name')->getData();
        $lastName = $form->get('last_name')->getData();
        $email = $form->get('email')->getData();
        $message = $form->get('message')->getData();
    }
    return array(
        'form' => $form->createView()
    );
}
Run Code Online (Sandbox Code Playgroud)

我用这个TWIG命令在我的indexAction中渲染这个表单:

{{ render(controller('RusselBundle:Default:contact')) }}
Run Code Online (Sandbox Code Playgroud)

一切都很好,如果页面没有重新加载,HTML5验证器工作正常,但如果表单有一些错误,如:firstName长度,错误根本不显示,我该怎么办,以便错误出现在indexAction形式?任何帮助,将不胜感激.我只是好奇它是可能的,如果 - 如何?对不起我的英语不好....

php forms symfony-forms symfony twig

4
推荐指数
1
解决办法
1743
查看次数