2016-11-04 6 views
1

В моем расширении extbase у меня есть модель встречи, и пользователи могут написать отзыв о том, как было назначено.
Итак, я создал модель обратной связи с различными полями.
Теперь, что я должен реализовать, когда пользователь нажимает кнопку «Создать обратную связь»?
До сих пор я получил это, но это не работает:Передача аргументов другому контроллеру или альтернативам

<f:link.action action="edit" controller="Feedback" arguments="{appointment:appointment}"> 

Я получаю ошибку:

Argument 1 passed to ...Controller\FeedbackController::newAction() must be an instance of ...\Model\Appointment, none given

FeedbackController:

 /** 
    * action new 
    * @param ...\Domain\Model\Appointment $appointment 
    * @return void 
    */ 
    public function newAction(...\Domain\Model\Appointment $appointment) { 
     $this->view->assign('appointment', $appointment); 
    } 

Почему я получаю эту ошибку? (объект назначения определенно был там, я отлаживал его)
Я полагаю, что это должно быть связано с переключением с AppointmentController на FeedbackController.

Каков наилучший способ реализации этого?

+1

Как генерируемая ссылка выглядит? Есть ли встреча с uid present? Доступно ли вашему плагину/контроллеру доступ к папке хранения, в которой записана запись о встрече? – minifranske

ответ

4

Вам нужен параметр pluginName в генерации ссылок, если вы используете разные плагины.

<f:link.action action="edit" controller="Feedback" pluginName="your_plugin" arguments="{appointment:appointment}"> 

При создании ссылки на TYPO3 присоединяет «пространство имен» аргумент в ссылку, как это: tx_myplugin [действие] = новое. Убедитесь, что имя pluginName совпадает с именем, указанным в файле ext_localconf.php. В этом случае pluginName будет вашим_plugin.

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'Vendor.' . $_EXTKEY, 
    'your_plugin', 
    array(
     'Feedback' => 'new', 
    ), 
    // non-cacheable actions 
    array(
     'Feedback' => '', 
    ) 
); 
+0

Думаю, мне тоже это нужно в моем случае - Без использования разных плагинов ?! Потому что это действительно была причина, по которой он не работал, хотя я просто использовал один плагин (я думаю) :) спасибо! –

0

Проверьте массив действий плагина-контроллера в файле ext_localconf.php и разместите его. Может быть, что-то не так.

0

Если вы получаете эту ошибку:

Argument 1 passed to ...Controller\FeedbackController::newAction() must be an instance of ...\Model\Appointment, none given

это потому, что вы даете Controler объект NULL и TAHT не разрешено с контроллером.

Чтобы избежать этой ошибки, вы можете разрешить NULL объект в контроллере:

/** 
    * action new 
    * @param ...\Domain\Model\Appointment $appointment 
    * @return void 
    */ 
    public function newAction(...\Domain\Model\Appointment $appointment=NULL) { 
     $this->view->assign('appointment', $appointment); 
    } 

это странно, потому что в вашей ссылке, вы вызываете действие «изменить» и у Вас есть ошибка в контроллере «newAction» вместо контроллера «editAction», вы должны иметь «редактировать» действие разрешено для вашего плагина (кэшируемый или нет):

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'Vendor.' . $_EXTKEY, 
    'your_plugin', 
    array(
     'Feedback' => 'edit', 
    ), 
    // non-cacheable actions 
    array(
     'Feedback' => 'edit', 
    ) 
); 

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

<f:link.action action="edit" controller="Feedback" pluginName="your_plugin" arguments="{appointment:appointment}"> 

Флориан