2013-12-13 3 views
2

Мне нужно создать signle глобальной страницы конфигурации без списка, только одна страницы с числом входов, такими как:Sonata Администратор: Хочет создать глобальную конфигурацию страницы

  • фба страница ссылка
  • идентификатор Google Analytics
  • некоторых стандартных интерфейсных тексты
  • опция CHECKBOX: показать интро, показать социальный медиа и т.д.

что-то, что не г equire, чтобы просмотреть записи, отредактировать, сохранить и вернуться в список и т. д.

Нужно ли мне создавать новый контроллер с формой и моей собственной ручкой? Или есть способ хорошо соединить/переопределить администратор сонаты с такой панелью?

Я использую:

  • Symfony 2.3.x Последние
  • соната кэш 2.1.5
  • Sonata блок 2.2.7
  • соната простой расширяет 2.1.4
  • Sonata admin 2.2.8
  • Sonata doctrine-orm-admin 2.2.5
  • Sonata jquery 1.8.*@dev
  • соната аэроропорта 2.2.*@dev
  • Соната пользователь 2.2.*@dev
  • соната СМИ 2.2.*@dev
  • сонаты страница 2.3.*@dev
  • Sonata сео 1.1.*@dev
  • Stof доктрина Расширения Последние

EDIT

После ответ pulzarraider и еще несколько поисков я закончил с overriding listAction контроллера CRUD.

В деталях, первым создал сервис определения (YML):

services: 
    stack.admin.global_administration: 
     class: Stack\Bundle\SiteBundle\Admin\GlobalConfigurationAdmin 
     tags: 
      - name: sonata.admin 
       manager_type: orm 
       group: Administration 
       label: Global Configuration 
     arguments: 
      - ~ 
      - ~ 
      - StackSiteBundle:GlobalConfiguration 

Затем создал класс администратора для этого конкретного действия:

<?php 
namespace stack\Bundle\SiteBundle\Admin; 

use Sonata\AdminBundle\Admin\Admin; 
use Sonata\AdminBundle\Route\RouteCollection; 

class GlobalConfigurationAdmin extends Admin 
{ 
    protected $baseRouteName = 'global-configuration'; 
    protected $baseRoutePattern = 'global-admin'; 

    protected function configureRoutes(RouteCollection $collection) 
    { 
     // notice removal of create action! 
     $collection->remove('create'); 
    } 
} 
?> 

И, наконец, контроллер CRUD для отображения пользовательской формы вместо объекта по умолчанию перечень действий:

<?php 
namespace Stack\Bundle\SiteBundle\Controller; 

use Sonata\AdminBundle\Controller\CRUDController as Controller; 
use Symfony\Component\HttpFoundation\Request; 

class GlobalConfigurationController extends Controller 
{ 
    public function listAction() 
    { 
     if (false === $this->admin->isGranted('LIST')) { 
      throw new AccessDeniedException(); 
     } 

     // custom code here... 

     return $this->render('StackSiteBundle:Administration:configuration-view.html.twig', array(
      'action' => 'list', 
      'csrf_token' => $this->getCsrfToken('sonata.batch') 
     )); 
    } 
} 
?> 

Спасибо за помощь в этом!

ответ

0

Да, это возможно в Sonata Admin, перегружая контроллер CRUD по умолчанию.

Необходимо создать пользовательский контроллер и перегрузить editAction. В editAction вы можете создать стандартную форму Symfony, обработать данные от пользователя и сохранить ее в любом месте.

+0

Это дало мне два намека, что делать, но я закончил переопределять listAction, поскольку мне нужно было отображать пользовательскую форму прямо ПОСЛЕ того, как вы выбираете элемент из верхнего меню. Это сделал трюк. Позже я могу опубликовать код, как это сделать. – ShachMaT

+0

@ShachMaT - По-видимому, вы не нашли времени для публикации кода. Вы упустили возможность поделиться с сообществом. – roelleor

+0

@roelleor да стыдно за меня. Даже несмотря на то, что я разместил «код», так что спасибо за то, что вы меня ударили по голове;) за опоздание. – ShachMaT

Смежные вопросы