我正在使用SonataAdminBundle作为Symfony2(v2.0.x)驱动的网站的管理界面的基础.
在SonataAdmin中添加到仪表板的实体默认情况下具有以下操作:
这适用于大多数实体,但是该网站有一些实体,其数据不是通过管理界面添加的 - 即它们是从面向公众的网站输入的.管理员只需要查看它们(仪表板中的"列表"操作),编辑它们或删除它们.管理员不应该能够向这些实体添加数据.
有没有办法配置SonataAdmin仪表板中各个实体旁边显示哪些操作?
我试图覆盖SonataUser/Admin/Model/UserAdmin's,configureFormFields()因为我需要从管理表单中删除一些默认字段.所以我vendor/bundles/Sonata/UserBundle/Admin/Model/UserAdmin.php在我的包中复制了文件app/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php并对其进行了修改.然后将其声明为服务:
# app/application/Sonata/UserBundle/Resources/config/services.yml
services:
application_user.registration.form.type:
class: Application\Sonata\UserBundle\Admin\Model\UserAdmin
arguments: [%sonata_user.model.user.class%]
tags:
- { name: form.type, alias: application_user_admin }
Run Code Online (Sandbox Code Playgroud)
现在问题:我做对了吗?我如何告诉sonata管理员使用它?
我正在尝试设置表单类型"sonata_type_immutable_array",如下所示:
->add('metadatos', 'sonata_type_immutable_array', array(
'keys' => array(
array('Test', 'text', array('required' => false)),
array('URL', 'url', array('required' => false)),
)
))
Run Code Online (Sandbox Code Playgroud)
像这样保存:
public function setMetadatos(\Portal\EntradasBundle\Entity\EntradaMeta $metadatos = null)
{
$this->metadatos = $metadatos;
return $this;
}
Run Code Online (Sandbox Code Playgroud)
但总是得到错误:
可捕获的致命错误:传递给Portal\EntradasBundle\Entity\Entrada :: setMetadatos()的参数1必须是Portal\EntradasBundle\Entity\EntradaMeta的实例,给出的数组
我不知道如何设置datatransformer(ArrayToModelTransformer)来达到这个目的.
任何人都可以帮助我PLZ.提前致谢!
在Sonata Admin中,我想在sonata_type_collection中使用上传和预览图片文件.
在我的Admin/ItemAdmin.php中:
class ItemAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('title')
->with('Photos')
->add('pictures', 'sonata_type_collection', array(
'label' => 'Pictures',
'by_reference' => false,
'required' => false,
), array(
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'id'
))
->end()
;
}
Run Code Online (Sandbox Code Playgroud)
在我的Admin/ItemPictureAdmin.php中:
class ItemPictureAdmin extends Admin {
protected function configureFormFields(FormMapper $formMapper) {
$obj = $this->getSubject();
$formBuilder = $formMapper->getFormBuilder();
if(is_object($obj) && $obj->getPicture())
{
$formMapper
->add('picturePreview', 'image_preview', array(
'required' => false,
'property_path' => false,
'upload_dir' => '/uploads/picture/',
'file_name' => $obj->getPicture() …Run Code Online (Sandbox Code Playgroud) 我已经按照本教程开始工作了:http://sonata-project.org/bundles/admin/master/doc/reference/getting_started.html.我的管理类正在显示,一切正常,这很好.我还在顶部添加了自定义徽标.
现在,我只想自定义仪表板.例如,我显示了一个"Station"实体.要向此实体添加条目,该链接的名称为"link_add".列表相同:"link_list".依此类推,"label_filters","link_action_create",......一切都是这样的.我想这是此操作进入默认布局的标准名称.但即使是演示,它也不是很"性感".
我该如何更改这些名称?我无法弄清楚我要编辑哪个文件?甚至是我应该做的.
谢谢.
我试图在网上搜索这个问题的一个明确的解决方案,但那里的新手确实没有具体的解决方案.
我有一个条目有很多EntryListing.在我的EntryAdmin listMapper中,我可以轻松地按语句列出条目
->add('listings')
Run Code Online (Sandbox Code Playgroud)
它只返回EntryListing __toString()函数中定义的列表.
有没有办法通过覆盖getExportFields()函数导出数据时实现相同的方法,如下所示:
public function getExportFields()
{
return array('name','tel','email','deviceType','postedOn','createdAt','facilitator','listings');
}
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助
我正在使用SonataMediaBundle来跟踪我的图像.我可以使用Sonata的助手在树枝上渲染图像:
{% media user.profilepic, 'reference' %}
Run Code Online (Sandbox Code Playgroud)
这将呈现为 <img src="the src">
但是,我想要获得的是裸路径,所以我可以为我的img添加一个类.就像是:
<img class="img-responsive" src="{{ asset(user.profilepic) }}">
Run Code Online (Sandbox Code Playgroud)
显然, asset(user.profilepic)不返回路径,而是返回对象,并且该对象似乎不包含图像的路径.
编辑
找到了我的答案的一部分:
{% set foo %}
{% path image, 'small' %}
{% endset %}
<img src="{{ asset(foo) }}" alt=""/>
Run Code Online (Sandbox Code Playgroud)
显然,块的输出可以设置为变量,然后将其传递给资产函数.
这是我面临的一个奇怪的问题.Sonata管理包标识和标题显示在2个不同的行上.

以下是我的配置文件的内容.
sonata_block:
default_contexts: [cms]
blocks:
sonata.admin.block.admin_list:
contexts: [admin]
sonata.block.service.text:
sonata.block.service.action:
sonata.block.service.rss:
sonata_admin:
title: MyTitle
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我在帐户和用户之间有一对多的关系.我正在使用sonata管理员进行CRUD.据我所知,它使用Symfony表单来完成工作.我试图添加这样的字段:
->add('users', 'entity', array(
'class' => 'AcmeDemoBundle:User',
'required' => true,
'multiple' => true,
'expanded' => true
));
Run Code Online (Sandbox Code Playgroud)
我也尝试过sonata_type_model
->add('users', 'sonata_type_model', array(
'class' => 'AcmeDemoBundle:User',
'required' => true,
'multiple' => true,
'expanded' => true
));
Run Code Online (Sandbox Code Playgroud)
问题是,在编辑帐户时(当我编辑用户的所有内容都会更新时),不会保存任何内容(与关系相关).我知道我必须更新拥有方(用户端),但我没有成功,因为"公共函数addUser($ user)"没有被调用所以我不能添加类似"$ user-> setAccount($ this )"到那个功能.
我的实体看起来像这样:
class Account
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $name;
/**
* @ORM\OneToMany(targetEntity="Acme\DemoBundle\User", mappedBy="account", cascade={"persist", "remove"})
*/
protected $users;
/**
* Add users
*
* @param Acme\DemoBundle\Entity\User $user
* @return …Run Code Online (Sandbox Code Playgroud) symfony-forms symfony symfony-sonata symfony-2.1 sonata-admin
假设我有一个汽车实体。除了典型的 Car 属性之外,我还使用了 updateBy 属性
在奏鸣曲中,我使用 AppBundle\Admin\CarAdmin.php 创建了一个 CRUD 管理页面
在 CarAdmin 类中,我有必要的方法,如 configureListFields、configureFormFields 等...
我猜我需要使用方法 prePersist($object) 添加 updatedBy 但我面临 $this->getUser() 不可用
问题是,如何让登录用户填充 updateBy 属性?
symfony ×10
symfony-sonata ×10
sonata-admin ×8
php ×3
sonata ×2
symfony-2.1 ×2
one-to-many ×1
twig ×1