我遇到了一些奇怪的事:
我通过app/console doctrine:generate:entity以下方式创建了三个学说实体:
我建立了关系,一切都与灯具数据(app/console doctrine:fixtures:load)一致.
帖子属于单个类别(category_id),并且有一个作者(user_id).
我曾经app/console doctrine:generate:crud为我的所有实体获得CRUD操作.
当我更新帖子时,我得到了这个奇怪的错误:
ContextErrorException:Catchable Fatal Error:类Proxies__CG __...\BlogBundle\Entity\Category的对象无法转换为字符串
为了正确显示我在下面使用的下拉字段PostType():
$builder ....
->add('categoryId','entity', array(
'class' => 'HotelBlogBundle:Category',
'property'=>'name'
))
->add('userId','entity',array(
'class'=>'UserBundle:User',
'property'=>'username'
))
Run Code Online (Sandbox Code Playgroud)
由于我指定了property选项,因此我不需要__toString()在我的实体类中使用.
如果我创建__toString()这样的(在类别和用户实体中),错误就会消失并且有效:
public function __toString()
{
return (string) $this->getId();
}
Run Code Online (Sandbox Code Playgroud)
我不确定我是否以正确的方式做到了.
此外,由于Category&User对象被传递给category_id和user_id字段,Doctrine(或Symfony)应该能够找出id列.我错过了什么?还有另一种方法吗?
我正在为我的项目使用SonataAdminBundle,我想覆盖一个块.
如果我在app/Resources/views/SonataAdminBundle/views/standard_layout.html.twig清除缓存中创建模板并执行此操作:
{% extends 'SonataAdminBundle::standard_layout.html.twig' %}
{% block theBlockIWantToOverride %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
我收到一个Maximum function nesting level of '250' reached, aborting!错误.
如果我删除该extends部件,则会呈现空白页面.相反,我必须将整个文件内容复制到这个新文件,然后更改块内容.我知道这是Symfony2的工作原理,我只是不知道是否有一个没有所有代码的解决方法?
我想这样做的原因是因为我使用了SensioLabsInsight而且它一直在困扰raw着SonataAdminBundle使用的枝条过滤器.我知道我可以忽略警告,但感觉不对.
此外,我尝试通过创建一个包来覆盖该包php app/console generate:bundle,然后在src/Vendor/AdminBundle/VendorAdminBundle.php中添加:
/**
* {@inheritdoc}
*/
public function getParent()
{
return 'SonataAdminBundle';
}
Run Code Online (Sandbox Code Playgroud)
并完成了上述过程,添加了一个src/Vendor/AdminBundle/Vendor/Resources/views/standard_layout.html.twig没有解决问题.再次,得到了嵌套级错误.
这是一个棘手的问题:我想为这个数字加上+1:012345675901,预期的结果是:012345675902.相反,我得到:2739134当我这样做时:
echo (012345675901+1);
Run Code Online (Sandbox Code Playgroud)
当我尝试:
echo ('012345675901'+1);
Run Code Online (Sandbox Code Playgroud)
我明白了:12345675902这与我需要的非常接近,但它消除了前导零.
当我这样做:
echo (int) 012345675901;
Run Code Online (Sandbox Code Playgroud)
我得到2739133.我也试过bcadd()但没有成功:
echo bcadd(012345675901, 1);
Run Code Online (Sandbox Code Playgroud)
结果导致了2739134.
我知道我在这里遗漏了一些东西.我将衷心感谢您的帮助!
更新1 答案1说数字是八进制的:
function is_octal($x) {
return decoct(octdec($x)) == $x;
}
$number = is_octal(012345675901);
echo var_dump($number);
Run Code Online (Sandbox Code Playgroud)
以上返回false.我以为我需要将它从八进制转换为普通字符串但不起作用.我不能避免不使用上面的数字 - 我只需要增加一个.
编辑2
这是正确的代码:
$str = '012345675901';
$str1 = ltrim($str, '0'); // to remove the leading zero
$str2 = bcadd($str1, 1); // +1 to your result
$str3 = strlen($str); // get the length of your …Run Code Online (Sandbox Code Playgroud) 我已经将XML路径存储到字符串中的项目,如下所示:response->items->item.
我需要做的是访问一个名为$ xml_array的数组,如下所示:
$ xml_array [ '响应'] [ '项目'] [ '项目']
当我在代码中写它时,它工作.问题是我希望它能够在飞行中完成.
我用它来转换response->items->item为['response']['items']['item']:
$xml_path = 'response->items->item';
$explode_path = explode('->', $xml_path);
$correct_string = false;
foreach($explode_path as $path) {
$correct_string .= '[\''.$path.'\']';
}
Run Code Online (Sandbox Code Playgroud)
问题是我无法$xml_array通过这样做访问:$xml_array[$correct_string]
所以我最终得到了这个:
$xml_tag = 'title';
$xml_path = 'response->items->item';
$correct_string = '$items = $xml2array';
$explode_path = explode('->', $xml_path);
foreach($explode_path as $path) {
$correct_string .= '[\''.$path.'\']';
}
$correct_string .= ';';
eval($correct_string);
foreach($items as $item) {
echo $item[$xml_tag].'<br />';
}
Run Code Online (Sandbox Code Playgroud)
并$xml_array通过 …