小编Aur*_*nas的帖子

如何在symfony中禁用doctrine的软删除(软删除)过滤器

为Doctrine 2安装和使用SoftDeleteable行为扩展非常简单.问题通常是尝试为某些代码部分禁用它并再次启用.您可能希望这样做:

  1. 加载软删除的实体
  2. 完全绕过软删除过滤器从数据库中删除实体

那么如何禁用它呢?

soft-delete symfony doctrine-orm

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

PHP7 fpm + Symfony 2.8 - 3.1,使用memcached但无法将会话数据写入文件

将symfony应用程序迁移到php 7但没有成功.

错误消息:

Symfony 2.8:

警告:session_write_close():无法写入会话数据(用户).请验证session.save_path的当前设置是否正确(/ var/lib/php/sessions)

Symfony 3.1:

警告:session_regenerate_id():会话对象销毁失败.ID:user(路径:/ var/lib/php/sessions)

问题

现在从消息中我猜想php正在尝试将会话写入文件.

  • 我使用memcached处理程序进行会话,它正在运行并与php 5.6一起使用.
  • 如果我使用native_file处理程序 - 一切正常.

我不知道如何从中得到任何意义.我发现类似问题的所有答案包括从native_file切换到memcached(已经使用它),更改session dir的用户和/或权限(无关紧要?),更新会话处理程序以从某些方法返回true(更新和检查).

我该如何调试?

session symfony php-7

7
推荐指数
1
解决办法
703
查看次数

datagrid过滤关系对象作为symfony 2.4中sonata admin的文本字段(下拉列表)

我有与'User'有关的实体'Action'.在SonataAdminBundle中创建了Admin CRUD控制器.除了用户过滤器呈现为下拉列表外,一切正常.我有8k用户数和增长,所以你必须明白为什么这是一个问题.
我希望用户过滤器是文本输入,然后提交以进行搜索LIKE %username%

现在我添加这样的用户过滤器 - $datagridMapper->add('user').

我知道我可以添加过滤器类型和字段类型,但我无法找到正确的组合和选项.在http://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/filter_field_definition.html上找到了相关信息,但仍然没有成功.

最终解决方案

关注Alex Togo回答我用过这段代码:

$datagridMapper->add('user', 'doctrine_orm_callback', array(
'callback' => function($queryBuilder, $alias, $field, $value) {
    if (empty($value['value'])) {
        return;
    }
    $queryBuilder->leftJoin(sprintf('%s.user', $alias), 'u');
    $queryBuilder->where('u.username LIKE :username');
    $queryBuilder->setParameter('username', '%'.$value['value'].'%');
    return true;
},
'field_type' => 'text'
))
Run Code Online (Sandbox Code Playgroud)

symfony sonata-admin symfony-2.4

6
推荐指数
1
解决办法
4093
查看次数

在Doctrine DQL中选择count(),使用左连接manyToMany单向关系,其中用户没有关系特定组

情境:我试图在DQL中为不在特定组中的用户选择count().

标准多对多之间的单向关系UserGroup实体从FOSUserBundle(和SonataUserBundle).系统:Symfony 2.5,Doctrine 2.4.

实体用户

PS这不是真正的代码复制.这是不可能的,因为有几个层以不同的格式和位置扩展不同的配置文件,所以如果你发现错误类型,这不是问题.

namespace RAZ\UserBundle\Entity;
/**
 * @ORM\Table(name="fos_user_user")
 */
class User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var Collection
     *
     * @ORM\ManyToMany(targetEntity="Group")
     * @ORM\JoinTable(name="fos_user_user_group")
     */
    protected $groups;
}
Run Code Online (Sandbox Code Playgroud)

实体组

namespace RAZ\UserBundle\Entity;
/**
 * @ORM\Table(name="fos_user_group")
 */
class Group
{
/**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
}
Run Code Online (Sandbox Code Playgroud)

问题:这甚至可以在DQL中完成吗?

问题非常类似于: 如何获得多对多关系中没有与DQL和Doctrine相对应的链接实体的实体? …

sql dql symfony doctrine-orm fosuserbundle

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

为表单事件中的某个表单字段添加模型转换器

我找到的唯一方法是在表单类型的buildForm方法中添加模型转换器,如下面的代码:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $transformer = new IssueToNumberTransformer($entityManager);
    $builder->add(
        $builder->create('issue', 'text')->addModelTransformer($transformer)
    ); 
}
Run Code Online (Sandbox Code Playgroud)

但是我有一个表单字段,当另一个表单字段具有有效值时显示,所以我宁愿在FormEvent::PRE_SET_DATA事件中创建表单字段.

1.一个错误的方式

->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($builder) {
     /** @var $order \VMSP\OrderBundle\Entity\OrderInterface */
     $order = $event->getData();
     $form  = $event->getForm();
     /** @var $serviceType \VMSP\StoreBundle\Entity\ServiceType */
     $serviceType = $order->getServiceType();

     //only home service needs user's address
     if ($serviceType && $serviceType->getType() == ServiceType::TYPE_HOME_SERVICE) {
         //won't work
         $form->add(
             $builder->create('address','hidden')
                     ->addModelTransformer($this->addressTransformer),
             array(
                 'label' => 'vmsp_order.contact.form.address',
             )
         );
    }
}
Run Code Online (Sandbox Code Playgroud)

有人建议

$form->add(
   $builder->create('address', 'hidden')
           ->addModelTransformer($this->addressTransformer),
   array( 'label' …
Run Code Online (Sandbox Code Playgroud)

forms symfony

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

在Doctrine(Symfony2)中的ManyToMany连接表中有附加列

情况

我有两个实体User和Group具有关系ManyToMany.关系创建为user_group具有两列user_id和的分隔表(称为)group_id.

问题

我想再addedOn TIMESTAMP DEFAULT CURRENT_TIMESTAMP 向表中添加一个字段user_group.我不在乎该学说不会看到这个专栏,我可以在需要时通过SQL选择它.

这可以通过学说配置来完成吗?如果有,怎么样?我知道我可以在DB中添加列,但每次生成迁移diff时都会有SQL语句删除此列.

相关信息

App:Symfony 2.5,Doctrine 2.4.

关系在配置中定义为User.php:

/**
 * @ORM\ManyToMany(targetEntity="RAZ\UserBundle\Entity\Group")
 * @ORM\JoinTable(name="user_group",
 *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
 * )
 */
protected $groups;
Run Code Online (Sandbox Code Playgroud)

many-to-many symfony doctrine-orm

3
推荐指数
1
解决办法
3835
查看次数

symfony2日期字段中的反向年份顺序

我希望日期字段中的年份列表按降序排列.我在Symfony参考http://symfony.com/doc/current/reference/forms/types/date.html中找不到选项.

我有一种感觉,只有切换一个选项,这是不可能的,但也许我只是没有找到它?

如果不可能 - 如何以不同的方式实施?扩展数据类或什么?

最终解决方案

所以诀窍是range首先使用更高的日期值设置选项.我设置'years' => range(date('Y') - 14, date('Y') - 60),.

reverse date symfony-2.3

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

奏鸣曲管理员自定义列表字段(不是来自实体)

Sonata管理包文档似乎很少,我没有找到实现这一点的方法.

目标:在字段列表中显示布尔值.应为其他属性中的每个对象计算值.

我设法为datagridFilter实现了这个,doctrine_orm_callback但不是为listFields实现.

工作代码configureDatagridFilters():

// LicenceAdmin.php
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper->add('isValid', 'doctrine_orm_callback', [
            'callback' => [$this, 'isValidFilterCallback'],
            'field_type' => 'checkbox',
        ]);
}
public function isValidFilterCallback($queryBuilder, $alias, $field, $value)
{
    // if no value or value == false means unchecked checkbox - show all instances
    if (!$value || empty($value['value'])) {
        return;
    }
    // if checked, display only by active logic
    $dateNow = new \DateTime();
    $queryBuilder
        ->andWhere("{$alias}.isActive = 1")
        ->andWhere("{$alias}.validFrom <= :date")
        ->andWhere("{$alias}.validTo > :date")
        ->setParameter('date', $dateNow) …
Run Code Online (Sandbox Code Playgroud)

symfony symfony-sonata sonata-admin

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