Создание ссылки типа Typolink в серверной среде с помощью Cronjob

В TYPO3 9.5 мы смогли генерировать ссылки типа Typolink из нашего класса планировщика следующим образом:

$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$contentRenderer = $objectManager->get(\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::class);
$command = $this->linkCommand($uid, 0);
$uri = $contentRenderer->typoLink_URL($command);
return $uri;

В TYPO3 v10 тот же код больше не работает при вызове через Cronjob.

При запуске задачи вручную из серверной части этот код отлично работает и генерирует URL-адреса на основе uid страницы. Но при запуске через Cronjob создается следующий вывод:

The parsedUri "http:///www/sites/webXXXX/html/typo3/sysext/core/bin/typo3" appears to be malformed

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

Кто-нибудь испытывал подобные проблемы с Cronjobs и TYPO3 v10? Связан ли этот сервер или что-то, что я могу исправить с помощью PHP? Я действительно не знаю причины этого.

Только что проверил ваш код в TYPO3 10.4.12, и он работает, как ожидалось - генерирует действительный URL-адрес для записи страницы, так как вы не показали нам объявление вашего метода linkCommand(). Я скопировал его из этот вопрос.

biesior 30.03.2021 15:15

Также проверьте этот ответ - первый образец работает так же, как и в задаче Планировщика в 10.x.

biesior 30.03.2021 15:31

@biesior Второй ответ отлично работает при использовании простых UID для генерации ссылок, спасибо. Но некоторые ссылки также выглядят как этот t3://page?uid=500#5996, и эта функция, похоже, работает только с обычными uid.

Andreas 30.03.2021 17:51

Действительно, ссылки t3:// можно преобразовать в обычные с помощью typolink. Это означает, что вам нужно отладить, почему у вас не работает. Покажите мне, пожалуйста, всю вашу декларацию метода linkCommand(). А также скажите, какую именно версию TYPO3 вы используете.

biesior 30.03.2021 18:19

Версия TYPO3 - 10.4.13, а функция linkCommand () по сути та же, что вы видите в первом связанном примере, за исключением параметра языка. Но я тоже пробовал это с TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder. Та же проблема, не будет работать с Cronjob. Проблема в том, что у некоторых ссылок должен быть якорь, иначе я бы просто извлек uid из ссылки t3:// и оставил его таким.

Andreas 31.03.2021 16:18

UriBuilder требует контекста контроллеров, попасть в задачу планировщика будет сложно. Опубликуйте весь класс задачи, чтобы можно было проверить.

biesior 31.03.2021 16:22
Стоит ли изучать 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
6
39
1

Ответы 1

Я попробую (непроверено):

$t3Urn = 't3://page?uid=500#5996';

// LinkService to get typolink configuration from t3://...
$typolinkConfig = GeneralUtility::makeInstance(
  \TYPO3\CMS\Core\LinkHandling\LinkService::class
)->$linkService->resolve($t3Urn);

// Absolute (if needed). Make sure that Site config contains a full base for the 
// requested page rootline AND that this base is also active in your cron environment.
// If you use application context to resolve bases, add it to the scheduler env:
// TYPO3_CONTEXT=Production/MySubcontext …/vendor/bin/typo3 scheduler:run
$typolinkConfig['forceAbsoluteUrl'] = true;

return GeneralUtility::makeInstance(
  \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer::class
)->typoLink_URL($typolinkConfig);

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