我为我的实体调用了一个表单,我Book有一个类型可以在我的视图中显示一个表单.在这种类型中,我有一些字段映射到我的实体中的属性.
现在我想添加另一个未映射到我的实体中的字段,并在表单创建期间为该字段提供一些初始数据.
我的类型看起来像这样
// BookBundle\Type\Book
public function buildForm(FormBuilderInterface $builder, array $options = null)
{
$builder->add('title');
$builder->add('another_field', null, array(
'mapped' => false
));
}
Run Code Online (Sandbox Code Playgroud)
表单就是这样创建的
$book = $repository->find(1);
$form = $this->createForm(new BookType(), $book);
Run Code Online (Sandbox Code Playgroud)
如何在表单创建过程中提供一些初始数据?或者我如何更改表单的创建以将初始数据添加到another_field字段?
标题似乎有些愚蠢,但是我对此非常认真。今天在工作中,我遇到了无法解释的怪异的PHP行为。幸运的是,此行为已在PHP 7.4中修复,因此似乎也有人偶然发现了该行为。
我举了一个小例子来说明出了什么问题:
<?php
class A {
private $a = 'This is $a from A';
public $b = 'This is $b from A';
public function __sleep(): array
{
var_dump(array_keys(get_object_vars($this)));
return [];
}
}
class B extends A
{
public $a = 'This is $a from B';
}
$b = new B;
serialize($b);
Run Code Online (Sandbox Code Playgroud)
在此处运行此代码:https : //3v4l.org/DBt3o
这里是这里发生的事情的一点解释。我们必须同时共享一个属性的A类和B类$a。细心的读者注意到,该物业$a具有两种不同的可见性(公共,私人)。到目前为止还算不上什么。魔术发生在实例中__sleep被神奇调用的方法中serialize。我们希望拥有所有获得的对象变量,将其get_object_vars减少为仅包含键,array_keys并使用输出所有内容var_dump。
我期望这样(从PHP 7.4开始发生,这是我的期望输出):
array(2) {
[0]=>
string(1) "b"
[1]=>
string(1) …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种音频格式,这种音频格式在开始时只有几个小时的静音时间不会影响文件的整体大小。有谁知道要使用哪个设置以及必须使用哪些设置?到目前为止,我还没有尝试过m4a,ogg和mp3。最初带有4个小时静默状态的音频样本会导致以某些格式显示400 MB的文件。
假设以下字符串:
$string = 'entry1_entry2';
Run Code Online (Sandbox Code Playgroud)
我想做的是这样的:
list($entry1, $entry2) = explode('_', $string);
Run Code Online (Sandbox Code Playgroud)
我现在的问题是有没有优雅的方法来强制爆炸(或任何其他功能)最少 2个数组项目?你可以指定第三个参数来获得最多2个元素,但我想要一个最小值.如果有这样的字符串:
$string = 'entry1';
Run Code Online (Sandbox Code Playgroud)
第二行会给出一个NOTICE因为只有一个数组元素.最好的方法是不检查生成的数组或字符串是否存在分隔符.