我正在尝试创建一个包含收集类型数据的表单,具体取决于所记录的用户.我正在关注Symfony食谱的这一章.
当query_builder选项是一个闭包,我从DQL获取数据时,一切正常.由于需要从代码中的不同位置获取数据,我更愿意在Repository类中定义查询.
这是我的存储库中的函数:
public function findOwnedBy($user) {
$query = $this->getEntityManager()->createQuery("SELECT l FROM MyBundle:Article a JOIN a.owndBy u WHERE u.id = :userId");
$query->setParameters(array("userId"=>$user->getId()));
return $query->getResult();
}
Run Code Online (Sandbox Code Playgroud)
在Controller中调用并返回Article数组时,此函数有效.这是symfony doc的片段:
$formOptions = array(
'class' => 'Acme\DemoBundle\Entity\User',
'multiple' => false,
'expanded' => false,
'property' => 'fullName',
'query_builder' => function(EntityRepository $er) use ($user) {
// build a custom query, or call a method on your repository (even better!)
},
);
Run Code Online (Sandbox Code Playgroud)
当我在query_builder中调用我的Repository函数时,我收到一个错误:Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given我可以理解,因为我的Repository返回一个Entity数组,而不是QueryBuilder.
我不想在表单中复制代码并创建新的QueryBuilder.从存储库中使用查询的最佳做法是什么?我想在存储库中有两个函数,一个返回一个数组,另一个返回QueryBuilder,但是Symfony doc中的注释" …
我需要在控制器内使用twig truncate filter.我不使用Twig模板,因为我的控制器只返回一个json对象.
从Twig Text扩展源,我看到过滤器功能是twig_truncate_filter,所以我试图将扩展作为服务,并在我的控制器中调用它的过滤器功能:
$something = "a long character string that need to be truncated";
$twigText = $this->get("twig.extension.text");
$twig = $this->get("twig");
$truncatedValue = $twigText->twig_truncate_filter($twig,$something)
Run Code Online (Sandbox Code Playgroud)
它给了我一个致命的错误:Call to undefined method Twig_Extensions_Extension_Text::twig_truncate_filter().
如何直接在控制器中使用过滤器功能?
我正在尝试在2个实体之间的形式中实现ManyToMany关系(例如,Product and Category to make simpe)并使用docs中描述的方法与原型和javascript(http://symfony.com/doc/current/ cookbook/form/form_collections.html).
以下是ProductType中创建类别集合的行:
$builder->add('categories', 'collection', array(
'type' => 'entity',
'options' => array(
'class' => 'AppBundle:Category',
'property'=>'name',
'empty_value' => 'Select a category',
'required' => false),
'allow_add' => true,
'allow_delete' => true,
));
Run Code Online (Sandbox Code Playgroud)
当我有一个新项目时,新的选择显示设置为空值"选择一个类别".问题是,如果我不更改空值,则将其发送到服务器,并在$ form-> bind()之后,我的Product对象在$ category ArrayCollection中获取一些空值.
我首先测试Product实体中setter中的值,并在ProductType中添加'by_reference'=> false,但在这种情况下,我得到一个异常,声明null不是Category的实例.
如何确保忽略空值?
我正在尝试启动一个Nginx容器,该容器提供/ opt / content中位于主机上的静态内容。
容器以以下内容开头:
docker run -p 8080:80 -v /opt/content:/usr/share/nginx/html nginx:alpine
Run Code Online (Sandbox Code Playgroud)
Nginx一直给我403 Forbidden。而且,当尝试检查目录的内容时,我得到了奇怪的结果:
$ $ docker exec -i -t inspiring_wing /bin/sh
/ # ls -l /usr/share/nginx/
total 4
drwxrwxrwx 3 root root 4096 Aug 15 08:08 html
/ # ls -l /usr/share/nginx/html/
ls: can't open '/usr/share/nginx/html/': Permission denied
total 0
Run Code Online (Sandbox Code Playgroud)
我chmod -R 777 /opt/确定对主机没有任何限制,但不会改变任何内容。我也尝试在:ro没有运气的情况下将标志添加到音量选项。
如何使已装载的卷对容器可读?
更新:这是我为重现此问题而做的全部步骤(以root用户身份,并使用另一个目录从干净的配置开始):
mkdir /public
echo "Hello World" > /public/index.html
chmod -R 777 /public
docker run -p 8080:80 -d -v /public:/usr/share/nginx/html nginx:alpine …Run Code Online (Sandbox Code Playgroud)