为Doctrine 2安装和使用SoftDeleteable行为扩展非常简单.问题通常是尝试为某些代码部分禁用它并再次启用.您可能希望这样做:
那么如何禁用它呢?
将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正在尝试将会话写入文件.
native_file处理程序 - 一切正常.我不知道如何从中得到任何意义.我发现类似问题的所有答案包括从native_file切换到memcached(已经使用它),更改session dir的用户和/或权限(无关紧要?),更新会话处理程序以从某些方法返回true(更新和检查).
我有与'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) 标准多对多之间的单向关系User和Group实体从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)
我找到的唯一方法是在表单类型的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事件中创建表单字段.
->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) 我有两个实体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) 我希望日期字段中的年份列表按降序排列.我在Symfony参考http://symfony.com/doc/current/reference/forms/types/date.html中找不到选项.
我有一种感觉,只有切换一个选项,这是不可能的,但也许我只是没有找到它?
如果不可能 - 如何以不同的方式实施?扩展数据类或什么?
所以诀窍是range首先使用更高的日期值设置选项.我设置'years' => range(date('Y') - 14, date('Y') - 60),.
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 ×7
doctrine-orm ×3
sonata-admin ×2
date ×1
dql ×1
forms ×1
many-to-many ×1
php-7 ×1
reverse ×1
session ×1
soft-delete ×1
sql ×1
symfony-2.3 ×1
symfony-2.4 ×1