我试图让实体进入自己的形式.我懒得记得一个getData()方法,但它在表单中不存在,我不记得如何使用它.
有没有办法让buildform方法中的实体不使用事件监听器?
我的意思是,像这样:
public function buildForm(FormBuilderInterface $builder, array $options)
{
/*some method to get the entity of the form such as getEntity????????*/
$builder->add('field');
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含集合的表单.所以我有:
/* my type */
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('photos','collection',array(
'type'=> new PhotoType(),
'allow_add'=>true));
}
/*Photo Type*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('photoname')
->add('size')
}
Run Code Online (Sandbox Code Playgroud)
但我想访问照片中的数据,所以我尝试在PhotoType中:
$data = $builder->getData();
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用,即使我正在编辑表单,所以照片集合有数据.为什么我不能以另一个调用的形式访问$ builder-> getData()?因为我正在尝试不做和eventListener ......
我正在使用带有FosUserBundle的SonataAdminBundle.我的仪表板中有一些问题.
在我的应用程序中,我有资源,公司和用户.用户属于公司,并且可以创建属于他的公司的资源.所有这些过程都将在仪表板中完成,该仪表板可供所有角色访问.
我要做的是每个人都可以访问仪表板,但是当用户选择要在仪表板中列出的实体(资源)时,只会显示他公司的实体.例如,两家公司可以创建一个车辆(资源),但每家公司只会看到自己的车辆(资源).
总而言之,我希望仪表板过滤连接的用户公司的实体.有没有办法在Sonata中创建一个查询,只显示一些实体,具体取决于用户的Company_Id和BBDD中映射的资源的Company_Id?
我试图在twig模板中使用jquery变量来通过ajax发送,但我无法访问树枝内的jquery变量:
我的代码是:
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery("#my_input").change(function(){
var value = jQuery("#my_input").val();
jQuery.ajax({
url: "{{ path('ParteAccidentes_ajax', {'emergencia': value}) }}",
timeout: 5000,
success: function(data) {
alert('ok');
},
error: function() {
alert('mal');
}
});
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
错误显示变量值不存在(在"url:..."行中)
谢谢!
我正在使用SonataAdminBundle,我正在试图通过show链接更改和实体的编辑链接.
我想这样做是因为我需要实体无法修改,但我希望您可以通过单击列表页面的标识符字段来显示实体.
我需要通过单击标识符来显示实体,而不是使用show action buttom.
所以我尝试了ClassAdmin:
protected function configureRoutes(RouteCollection $collection){
$collection->add('edit', $this->getRouterIdParameter().'/show');
}
Run Code Online (Sandbox Code Playgroud)
尽管url是在节目中正确生成的,但列表页面中的标识符会重定向到编辑页面.实际上,我在编辑链接中进行了更改并不会产生效果并始终重定向到编辑页面.
Thansk很多!
在多对多的关系中,我遇到了查询构建器的一些麻烦.
我有一个实体公司也有子公司,所以我有:
class Company {
private $id;
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Company")
* @ORM\JoinTable(name="company_relation",
* joinColumns={
* @ORM\JoinColumn(name="id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="subcompany", referencedColumnName="id")
* }
* )
*/
private $ChildrenCompany;
[...]
}
Run Code Online (Sandbox Code Playgroud)
然后我试图创建一个查询构建器,它返回已确定子公司的公司(例如子公司的id为5).我试过两种方式:
方法A)
$query->select ('c');
$query->from(MyBundle:Company, 'c');
$query->leftJoin('c.ChildrenCompany','j');
$query->where('j.subcompany = 5');
Run Code Online (Sandbox Code Playgroud)
它不起作用并给我错误:类Application\Sademer\CoreBundle\Entity\Company没有名为子公司的字段或关联
方法B)
$query->select ('c');
$query->from(MyBundle:Company, 'c');
$query->where('j.ChildrenCompany = 5');
Run Code Online (Sandbox Code Playgroud)
它不起作用,并给我错误:无效的PathExpression.期望StateFieldPathExpression或SingleValuedAssociationField.
谢谢!!!;)
我对PreUpdate HasLifecycleCallbacks有一些问题.
我有一个实体,假设"A"与实体"B"具有OneToOne关系.所以我有:
/**
* @ORM\Entity()
* @ORM\HasLifecycleCallbacks
*/
class A
{
/**
* @ORM\OneToOne(targetEntity="B", inversedBy="attrA", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="fieldB", referencedColumnName="id")
*/
private $attrB;
public function __construct()
{
$this->attrB = new B();
}
/**
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function updateSomthing(){
//$gestor = fopen("/pruebitas.txt", "r");
$this->attrB->setDate($this->getDate());
}
}
Run Code Online (Sandbox Code Playgroud)
B级是:
class B
{
/**
* @ORM\OneToOne(targetEntity="A", mappedBy="attrB")
*/
private $attrA;
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个新的实体A,一切正常,问题是当我更新实体A时,PreUpdate函数是fire,(因为它在注释行中创建文件),但实体B不会在数据库中持久存在,即使B中的字段应该更新.
有没有想法在PreUpdate上级联持久化?
谢谢!!