2017-01-18 9 views
-1

Я пытаюсь изменить расширение importr, чтобы вставить пользовательское действие в контроллер «Importr» в importr \ Classes \ Controller \ ImportrController.php.TYPO3 ExtBase - Требуемый аргумент X не установлен

Я назвал действия "CustomAction" и ссылку на него с помощью кнопки, которую я рендеринга с жидкостью в importr \ Resources \ Private \ Templates \ Importr \ Index.html с помощью <f:link.action>

<div id="myButton"> 
    <f:link.action 
     extensionName="Importr" 
     pluginName="Importr" 
     controller="Importr" 
     action="custom" 
     arguments="{taskid:5}" 
    > 
    Click here 
    </f:link.action> 
</div> 

действие контроллера:

/** 
* @param int $taskid 
* @return void 
*/ 
public function customAction($taskid) 
{ 
    ... 
} 

Однако любая попытка передать параметр в действие не выполняется. С моей первой попытки я даже получаю страницу с ошибкой, даже не нажимая на кнопку, как вы можете видеть на скриншоте ниже.


Попытка # 1

/** 
* @param int $taskid 
* @return void 
*/ 
public function customAction($taskid) 
{ 
    print_r($taskid); 
    die; 
} 

Uncaught TYPO3 Исключение

1298012500 Обязательный аргумент "TaskID" не установлен для HDNet \ Importr \ Controller \ ImportrController-> пользовательский.

TYPO3 \ CMS \ Extbase \ Mvc \ Controller \ Exception \ RequiredArgumentMissingException выброшен в файле /var/www/typo3/typo3_src-6.2.25/typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php в строке 425. '

importer


Попытка # 2

/** 
* @return void 
*/ 
public function customAction() 
{   
    $taskid = "default"; 

    if ($this->request->hasArgument('taskid')) { 
     $taskid = $this->request->getArgument('taskid'); 
    } 

    echo "TASKID = '$taskid'"; 
    die; 
    ... 

ВЫХОД: TaskId = 'по умолчанию'


Покушение # 3:

/** 
    * @return void 
*/ 
public function customAction() 
{ 
     $args = $this->request->getArguments(); 
     $taskid = $args['taskid']; 

     echo "TASKID = '$taskid'"; 
     die; 

ВЫВОД: TaskId = ''

Я не знаю, что еще я могу попробовать. Возможно ли, что я допустил ошибку в Fluid Code? Я использую неправильное имя pluginName или extensionName или это даже ошибка typo3? Где хранится имя pluginName, поэтому я могу проверить его?



Больше информации

я позволил мое пользовательское действие, добавив его к другим действиям внутри ext_tables.php

<?php 

if (!defined('TYPO3_MODE')) { 
    die('Access denied.'); 
} 

/** @var string $_EXTKEY */ 

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
    'HDNET.' . $_EXTKEY, 
    'file', 
    'tx_importr_mod', 
    '', 
[ 
    'Importr' => 'custom,index,import,preview,create', 
], 
[ 
    'access' => 'user,group', 
    'icon' => 'EXT:' . $_EXTKEY . '/ext_icon.gif', 
    'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_mod.xlf' 
]); 

ответ

2

Существовали две проблемы:

1 . ext_t ables.php

Неверный порядок действий. Первое действие всегда является действием по умолчанию, поэтому его действие было принято как действие по умолчанию, и поэтому после щелчка по модулю Importr в меню слева не было загружено ни одной страницы. Он работал после того, как я исправил его.

'Importr' => 'index,import,preview,create,custom', 

2. Жидкость

pluginName неверен, правильный pluginName является file_importrtximportrmod, который мы можем видеть в ext_tables.php

Он даже не нужен, он также работает, если вам опустить pluginName и extensionName.

После этого очистите кеш в инструменте установки.

+0

Если это решение, отметьте его как один, thx;) –

+0

Я пока не могу, потому что вам сначала нужно подождать несколько дней после того, как вы сможете принять свой собственный ответ.: P Я могу принять его через 2 дня. – Black