小编Mad*_*nty的帖子

在EntityChoiceList.php第273行中isset或为空的非法偏移类型

在我的Symfony2项目中,我试图动态生成我的表单类型中使用的实体,绕过查询生成器等的使用.

对于实体选择属性,我提供了一系列要使用的实体.在页面加载一切似乎都很好,并显示正确的内容.但是在表格提交上我得到了

在EntityChoiceList.php第273行中isset或为空的非法偏移类型

at ErrorHandler ->handle ('2', 'Illegal offset type in isset or empty',
'..../Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php', '273', array('key'     => object(myEntity))) in  ..../Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php at line 273   
            .....
            return isset($entities[$key]) ? $entities[$key] : null; 
            .....
Run Code Online (Sandbox Code Playgroud)

我难倒的是如果我添加var_dump(isset($ this-> entities [$ key]));退出; 在这一行之上,我返回'bool(true)',这对我来说意味着密钥确实存在.

作为背景,我试图扩展EntityType,以便在我的项目中轻松添加:

public function getDefaultOptions(array $options)
{   
    $defaultOptions = array(
        'em'                => null,
        'class'             => 'Acme\TestBundle\Entity\myEntity',
        'property'          => null,
        'query_builder'     => null,
        'choices'           => $this->myEntityArray,
    );

    $options = array_replace($defaultOptions, $options);
    $defaults = parent::getDefaultOptions($options);        
    return $defaults;
}    
Run Code Online (Sandbox Code Playgroud)

有没有任何想法为什么我得到这个错误,或者我是否仍然错过了我的问题,试图将一系列实体传递给选择?

symfony doctrine-orm

12
推荐指数
2
解决办法
7774
查看次数

FOSUserBundle密码验证

我正在尝试覆盖FOSUserBundle中当前的密码验证.我尝试了一些选项,但我仍然找不到解决方案.

为了增加密码的MinLength,我创建了一个validation.yml:

# src/Acme/UserBundle/Resources/config/validation.yml
Acme\UserBundle\Entity\User:
    properties:
        username:
            - MinLength: { limit: 3, message: "Your username must have at least {{ limit }} characters." }
            - MaxLength: { limit: 255, message: "The username is too long" }
            - NotBlank: { message: "Please enter a username"}       

        plainPassword:
            - NotBlank: { message: "Please enter a password"}
            - MinLength: { limit: 8, message: "Your password must have at least {{ limit }} characters.", groups [Registration,Profile]}
                - MaxLength: { limit: 255, message: "The password is …
Run Code Online (Sandbox Code Playgroud)

symfony fosuserbundle

9
推荐指数
1
解决办法
1万
查看次数

将FOSRestBundle与表单一起使用

Noob,有关FOSRestBundle,JMSSerializerBundle和模板的问题.

我正在尝试替换当前通过twig输出json的现有代码以使用FOSRestBundle.这是成功的,从Controller传递的内容最初是在数组中,但现在我正在尝试将表单传递给FOSRestBundle,结果是我的值永远不会被返回.

下面的代码复制了该场景

/**
 *  my sample get action
 * @View(templateVar="form")   
 */
public function getAction($id)
{
    ...         
     $form = $this->createFormBuilder(array('myValue' => 'SOMEVALUE'))
        ->add('myValue', 'hidden')
        ->getForm();

    $view = FOSView::create($form);
    $view->setFormat('json');

    return $this->get('fos_rest.view_handler')->handle($view);
}
Run Code Online (Sandbox Code Playgroud)

回报

{"children":{"_token":[],"myValue":[]}}
Run Code Online (Sandbox Code Playgroud)

我期望在这里看到的是:

{"children":{"_token": "mylongtoken","myValue": "SOMEVALUE"}}
Run Code Online (Sandbox Code Playgroud)

我一直把我的代码基于LiipHelloBundle中的示例,除非我错了,这与他们提供的示例匹配?我出错的任何想法?

php symfony fosuserbundle

8
推荐指数
1
解决办法
949
查看次数

是否存在会话超时的symfony2事件/处理程序,即未登录

我使用FOSRestBundle在防火墙内进行ajax json调用.一切似乎都很好用,除了在会话超时发生时我无法处理.现在它在这种情况下重定向到login_check,将html而不是json返回给客户端.

我知道,并在我的应用程序中使用success_handler和failure_handler.我找不到用于处理授权失败的内置处理程序,例如会话超时.

FOSRestBundle中是否有某些东西可以帮助解决这个问题,或者我在Symfony2中没有看到的东西?

symfony

6
推荐指数
2
解决办法
2682
查看次数

自定义DQL函数来复制MySQL CONV

我正在尝试创建一个自定义DQL函数,以允许我在我的DQL中使用MySQL CONV字符串函数.我的目标是能够对以十六进制存储的内容执行位检查.以前我刚刚执行过SQL查询,例如:

.... where conv(`myField`,16,10) & 4096 = 4096
Run Code Online (Sandbox Code Playgroud)

但是,我想将这些SQL查询转换为DQL格式.我无法弄清楚的是如何将'&4096 = 4096'带入解析器.这是我能够得到的:

namespace Acme\TestBundle\DQL;

use Doctrine\ORM\Query\Lexer; 
use Doctrine\ORM\Query\AST\Functions\FunctionNode; 

class MysqlConv extends FunctionNode
{
        public $stringFirst; 
        public $stringSecond; 
        public $stringThird; 
        public $stringFourth; 

    public function parse(\Doctrine\ORM\Query\Parser $parser) 
    { 
        $parser->match(Lexer::T_IDENTIFIER); 
        $parser->match(Lexer::T_OPEN_PARENTHESIS); 
        $this->stringFirst = $parser->StringPrimary(); 
        $parser->match(Lexer::T_COMMA);
        $this->stringSecond = $parser->ArithmeticPrimary();
        $parser->match(Lexer::T_COMMA);
        $this->stringThird = $parser->ArithmeticPrimary();      
        $parser->match(Lexer::T_CLOSE_PARENTHESIS); 


    } 

    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) 
    { 
        return 'CONV(' . 
            $this->stringFirst->dispatch($sqlWalker) . 
        ',' . $this->stringSecond->dispatch($sqlWalker) . ',' . $this->stringThird->dispatch($sqlWalker) . ') & 4096'; 
    } 
}
Run Code Online (Sandbox Code Playgroud)

我正在使用这样的:

    return $this->getEntityManager()
            ->createQuery('SELECT c, h …
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-orm

5
推荐指数
1
解决办法
1266
查看次数

无法在单个控制台命令中一起运行两个迁移执行命令

对于开发,我们有一个Symfony控制台命令,用于执行其他控制台命令以重建db,运行fixture等.

作为该过程的一部分,我需要运行一些樱桃挑选的学说迁移命令,但由于某种原因,我无法在同一进程中运行多个执行命令.

为了确认,我可以手动运行这些任务,并且可以在控制台执行中运行其中一个命令,然后手动运行另一个没有问题.

          $this->getApplication()->run(new ArrayInput(array(
            'command' => 'doctrine:migrations:execute',
            'version' => '20140310162336',
              '--no-interaction' => true
                )), $output);

          $this->getApplication()->run(new ArrayInput(array(
            'command' => 'doctrine:migrations:execute',
            'version' => '20140310170437',
              '--no-interaction' => true
                )), $output);
Run Code Online (Sandbox Code Playgroud)

返回的错误是:

[Doctrine\DBAL\Migrations\MigrationException]
Migration version 20140310162334 already registered with class Doctrine\DBAL\Migrations\Version
Run Code Online (Sandbox Code Playgroud)

作为第一个存在的版本文件的版本可以确认一个不在migration_versions表中,也不是在这种情况下需要.建议将其加载到迁移对象中.

任何人都可以提供输入,如果我做错了,如果这可能是某个地方的错误.

使用dev-master运行Symfony 2.2.*和迁移包.

symfony doctrine-extensions

5
推荐指数
2
解决办法
1340
查看次数