Пользовательский метод не найден при расширении PageAdmin Sonata

Мы использовали Easy Extends для расширения возможностей администратора страницы Sonata. Итак, теперь у меня есть класс, который выглядит так:

class PageAdmin extends BasePageAdmin
{
    public function configureRoutes(RouteCollection $collection)
    {
        parent::configureRoutes($collection);

        $collection->add( 'send_page_emails', '/admin/send-page-emails');
    }
    ...
}

... и мой пользовательский класс PageAdminController включает в себя следующую функцию:

protected function sendPageEmailsAction()
{
    die('Here I am!');
}

Проблема возникает, когда я пытаюсь перенаправить на мое новое действие. Я получаю следующее:

Call to undefined method Sonata\AdminBundle\Controller\CRUDController::sendPageEmailsAction

Как я могу заставить приложение искать в правильном месте для моего действия?

===

Обновлено: вот соответствующие части admin.yml.

sonata.page.admin.page:
    class: Application\Sonata\PageBundle\Admin\PageAdmin
    arguments: [~, '%sonata.page.admin.page.entity%', SonataPageBundle:PageAdmin]
    tags:
        - { name: sonata.admin, manager_type: orm, group: admin, label: Seiten }
    calls:
        - [ addChild, ['@sonata.page.admin.block']]
        - [ addChild, ['@sonata.page.admin.snapshot']]
        - [ setPageManager, ['@sonata.page.manager.page']]
        - [ setCacheManager, ['@sonata.cache.manager']]
        - [ setSiteManager, ['@sonata.page.manager.site']]
        - [ setTranslationDomain, ['SonataPageBundle']]
        - [ setTemplate, ['edit', 'ApplicationSonataPageBundle:PageAdmin:edit_duplicate.html.twig']]
        - [ setTemplate, ['tree', 'SonataPageBundle:PageAdmin:tree.html.twig']]
        - [ setTemplate, ['compose', 'ApplicationSonataPageBundle:PageAdmin:compose.html.twig']]
        - [ setTemplate, ['create', 'SonataAdminBundle:CRUD:edit.html.twig']]
        - [ setTemplate, ['select_site', 'SonataPageBundle:PageAdmin:select_site.html.twig']]
        - [ setTemplate, ['list', 'SonataPageBundle:PageAdmin:list.html.twig']]
        - [ setTemplate, ['compose_container_show', 'SonataPageBundle:PageAdmin:compose_container_show.html.twig']]

Вы следовали инструкциям на странице symfony.com/doc/master/bundles/SonataAdminBundle/cookbook/…, чтобы создать пользовательское действие? Третьим аргументом вашей службы администрирования должен быть ваш PageAdminController. Ваша ошибка может заключаться в том, что вы оставили CRUDController по умолчанию для Sonata.

Picoss 03.04.2019 16:49

Спасибо. Я только что добавил содержимое admin.yml к вопросу после прочтения вашего комментария. На первый взгляд кажется, что используется правильный контроллер.

Patrick 03.04.2019 16:53

Может глупый вопрос, но ты кэш чистил?

Picoss 03.04.2019 16:56

Я также заметил, что ваше действие sendPageEmailsAction защищено, я думаю, оно должно быть общедоступным.

Picoss 03.04.2019 16:59

Кэш был очищен - в итоге это была защищенная функция. Это исправили. Если вы создадите ответ, подчеркнув это изменение, я буду рад отметить его как правильный.

Patrick 04.04.2019 09:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
200
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В админке метод действия должен быть публичным и незащищенным, иначе Sonata не сможет найти метод для вашего действия:

<?php

namespace Application\Sonata\PageBundle\Controller;

use Sonata\AdminBundle\Controller\CRUDController;

class PageAdminController extends CRUDController
{
   public function sendPageEmailsAction()
   {
       // your code here
   }
}

Другие вопросы по теме