Typo3 Вызов функции-члена на нуль - PullRequest
0 голосов
/ 12 сентября 2018

Я сталкивался с подобными проблемами в Stackoverflow, но ни один из этих ответов не помог мне (включая очистку кэша, очистку систем кэширования кода операции PHP, деактивацию и повторную активацию расширения). Надеюсь, кто-то может указать мне правильное направление.

Я запускаю запланированную команду для расширения. В какой-то момент моей команде нужно будет вызвать метод test () из класса MyController.

Я пытался создать ссылку на класс с помощью вызова наследования И ВСЕМИ методами внедрения, но независимо от того, каким образом я это пробую, всегда возникает одна и та же проблема ...:

Call to a member function test() on null

Совсем недавно я использовал метод впрыска, который не рекомендуется, но он упрощает мой пример ниже, поэтому я буду использовать его сейчас. (VendorName и ExtensionName являются фиктивными именами obvs):

* @var \VendorName\ExtensionName\Controller\MyController
* @inject
*/
protected $mc;  

public function myCommand()
{
     return $this->mc->test(); //should return true

}   

... и внутри MyController

public function test()
{
    return true;
}

1 Ответ

0 голосов
/ 13 сентября 2018

Проблема не в инъекционном вызове команды Class, а в том, что некоторые автоматически генерируют код в классе MyController. Кажется, Extension Builder может вызвать ошибку, неправильно создав строку @inject в неправильном месте. Вот код, который он создал автоматически:

  /**
 * @var \VendorName\ExtensionKey\Domain\Repository\ExampleRepository
 * @inject
 */
protected $importService = null;

 /**
 * @inject
 */

protected $exampleRepository = null;

... этот второй вызов @inject создает ошибку. Это должно быть просто:

 /**
 * @var \VendorName\ExtensionKey\Domain\Repository\ExampleRepository
 * @inject
 */
protected $importService = null;
protected $exampleRepository = null;

К сожалению, дублирование не говорит вам, какой класс вызывает проблему, поэтому я, естественно, подумал, что это был мой собственный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...