在我的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)
有没有任何想法为什么我得到这个错误,或者我是否仍然错过了我的问题,试图将一系列实体传递给选择?
我正在尝试覆盖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) 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中的示例,除非我错了,这与他们提供的示例匹配?我出错的任何想法?
我使用FOSRestBundle在防火墙内进行ajax json调用.一切似乎都很好用,除了在会话超时发生时我无法处理.现在它在这种情况下重定向到login_check,将html而不是json返回给客户端.
我知道,并在我的应用程序中使用success_handler和failure_handler.我找不到用于处理授权失败的内置处理程序,例如会话超时.
FOSRestBundle中是否有某些东西可以帮助解决这个问题,或者我在Symfony2中没有看到的东西?
我正在尝试创建一个自定义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控制台命令,用于执行其他控制台命令以重建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.*和迁移包.