小编Flo*_*ent的帖子

Symfony表单query_buider和实体存储库

我正在尝试创建一个包含收集类型数据的表单,具体取决于所记录的用户.我正在关注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中的注释" …

dql query-builder symfony-forms symfony

14
推荐指数
2
解决办法
3万
查看次数

在控制器内调用Twig truncate filter

我需要在控制器内使用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().

如何直接在控制器中使用过滤器功能?

php symfony twig

9
推荐指数
2
解决办法
4848
查看次数

删除来自空集合表单项的空值

我正在尝试在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的实例.

如何确保忽略空值?

forms collections null symfony

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

批量拒绝Docker许可

我正在尝试启动一个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)

docker docker-volume

0
推荐指数
1
解决办法
3562
查看次数