小编tho*_*rad的帖子

Sonata Admin与文件上传的一对多关系(appendFormFieldElement)

我目前正面临着SonataAdminBundle的挑战,一对多的关系和文件上传.我有一个实体叫Client,一个叫ExchangeFile.一个人Client可以有几个ExchangeFile,所以我们在这里有一对多的关系.我正在使用VichUploaderBundle进行文件上传.

这是Client班级:

/**
 * @ORM\Table(name="client")
 * @ORM\Entity()
 * @ORM\HasLifecycleCallbacks
 */
class Client extends BaseUser
{    
    // SNIP

    /**
     * @ORM\OneToMany(targetEntity="ExchangeFile", mappedBy="client", orphanRemoval=true, cascade={"persist", "remove"})
     */
    protected $exchangeFiles;

    // SNIP
}
Run Code Online (Sandbox Code Playgroud)

这是ExchangeFile班级:

/**
 * @ORM\Table(name="exchange_file")
 * @ORM\Entity
 * @Vich\Uploadable
 */
class ExchangeFile
{
    // SNIP

    /**
     * @Assert\File(
     *     maxSize="20M"
     * )
     * @Vich\UploadableField(mapping="exchange_file", fileNameProperty="fileName")
     */
    protected $file;

    /**
     * @ORM\Column(name="file_name", type="string", nullable=true)
     */
    protected $fileName;

    /** …
Run Code Online (Sandbox Code Playgroud)

php symfony symfony-sonata sonata-admin

8
推荐指数
1
解决办法
6450
查看次数

Sonata Admin:让用户只编辑他们拥有的实体(ACL)

我有使用ACL设置的Sonata Admin.我有不同的用户,组和权限,工作正常.为此,我按照ACL上的Sonata Admin文档进行了操作.

所以这是我的问题:什么是一种干净的方法来确保后端(管理员)用户只能查看,编辑和删除他们使用Symfony和Sonata Admin的内置ACL机制创建的实体?保存在ACL表格中后,Sonata Admin会自动存储对象的所有者(创建者)(来自Sonata文档):

所有者:创建对象时,当前登录的用户被设置为该对象的所有者,并被授予该对象的所有访问权限;

Stackoverflow上已经回答了同样的问题,但答案并没有详细解释如何使用ACL解决它.

acl symfony sonata-admin

5
推荐指数
1
解决办法
6294
查看次数

RegEx只有在特定HTML元素中出现时才匹配字符串

我试图在Visual Studio 2013项目中找到某些代码部分.我正在使用RegEx搜索功能(我在"搜索选项"下选中"使用正则表达式").

更具体地说,我正在尝试找到位于开始和结束脚本标记之间的字符串"findthis"(不带引号).RegEx应该能够匹配字符串多行.

例:

<html>
    <head>
        <script>
            var x = 1;

            if (x < 1) {
                x = 100;
            }

            var y = 'findthis'; // Should be matched
        </script>
    </head>
    <body>
        <script>
            var a = 2;
        </script>

        <h1>Welcome!</h1>
        <p>This findthis here should not be matched.</p>

        <script>
            var b = 'findthis too'; // Should be matched, too.
        </script>

        <div>
            <p>This findthis should not be matched neither.</p>
        </div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试的是以下((?s)启用多行):

(?s)\<script\>.*?(findthis).*?\</script\>
Run Code Online (Sandbox Code Playgroud)

这里的问题是,当脚本结束标记出现时,它不会停止搜索"findthis".这就是为什么在Visual Studio 2013中,它还会在搜索结果中的正文开头标记之后显示脚本元素.

任何人都可以帮助我摆脱这个RegEx地狱吗?

html regex visual-studio-2013

4
推荐指数
1
解决办法
1314
查看次数

Doctrine Query Builder,“介于”表达式和子查询之间

我正在尝试使用 Doctrine 的 Query Builder 创建一个非常复杂的查询(我使用的是 Doctrine 2.2)。在模型中,我有一个Distributor类和一个DistributorVisit具有一对多关系的类。每次代表访问分销商时,都会在DistributorVisit表中添加一个包含访问日期的新行。可以在此处找到两个表的 ER 图。

现在我希望能够通过他们的上次访问日期过滤经销商。因此,用户输入一个日期范围(上次访问日期和上次访问日期),并列出上次访问日期介于这两个日期之间的经销商。我正在使用 Doctrine 的查询生成器,因为我在过滤器中执行了许多其他条件查询,而且我发现面向对象的方法在这种情况下效果最好。这是我在DistributorRepository课堂上所做的:

$qb = $this->getEntityManager()->createQueryBuilder()
     ->select('o')
     ->from('MyBundle:Distributor', 'o');

// Lots of 'andWhere's here

$qbv = $this->getEntityManager()->createQueryBuilder();

$qb->andWhere($qb->expr()->between(

    $qbv->select($qbv->expr()->max('v.visitDate'))
        ->from('MyBundle:DistributorVisit', 'v')
        ->join('MyBundle:Distributor', 'o2',
            Join::WITH,
            $qbv->expr()->andX(
                $qbv->expr()->eq('o2.id', 'v.distributorId'),
                $qbv->expr()->eq('o2.id', 'o.id')
            ))
        ->getDQL(),

    $filter->getLastVisitFrom()->getTimestamp(),
    $filter->getLastVisitTo()->getTimestamp()
));
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

[Syntax Error] line 0, col 83: Error: Expected Literal, got 'SELECT'
Run Code Online (Sandbox Code Playgroud)

我想这是因为查询生成器期望我的子选择所在的文字,但是,子查询的结果应该是文字,对吗?可能是因为查询生成器没有相应地添加括号?

非常感谢你的帮助。

query-builder symfony doctrine-orm

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