файл php typo3 в функции контроллера доступа к общим папкам
Существует ли какая-либо возможность доступа к функции контроллера из файла php, основанного на resource/public/php/file.php
Я хочу, чтобы этот php-файл был специальным файлом, который я использую для этого:
<img src="file.php"></img>
Я отключу читаемые пути. Таким образом, этот php-файл выполняет некоторое шифрование и нуждается в подключении к обычной функции контроллера.
Спасибо
1 answers
Существует ли какая-либо возможность доступа к функции контроллера из файла php, основанного на resource/public/php/file.php
Да, это возможно, но для этого вам также необходимо bootstrap
ядро TYPO3. Или, если это метод static
и public
, вы можете вызвать его напрямую.
Но в вашем случае это кажется неправильным способом сделать это.
Предполагая, что вы работаете над какой-то капчей, вы должны рассмотреть свой собственный page type
для рендеринга dynamic images
. Вот рабочий пример:
Настройка типоскрипта
В типоскрипте мы регистрируем наш собственный page typ
и указываем на него нашему extension
, controller
и action
:
DynamicCaptchaImage = PAGE
DynamicCaptchaImage {
typeNum = 1234
10 = USER_INT
10 {
userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
pluginName = Pi1
extensionName = MyExtName
vendorName = MyCompanyName
controller = MyExtbaseController
action = renderCaptchaImage
# view =< plugin.tx_myextname.view // you provide the view yourself
# persistence =< plugin.tx_myextname.persistence // in case you need a repository you should uncomment it
settings =< plugin.tx_myextname.settings
}
config {
disableAllHeaderCode = 1
additionalHeaders = Content-Type: image/png
xhtml_cleaning = 0
admPanel = 0
debug = 0
}
}
См. также: Регистрация пользовательского доступа к контроллеру на основе typeNum
Контроллер
Вот пример того, как должны выглядеть ваши controller
и action
:
<?php
namespace MyCompanyName\MyExtName\Controller;
/**
* MyExtbaseController
*/
class MyExtbaseController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* Render Captcha Image Action
*
* @return void
*/
public function renderCaptchaImageAction() {
// Send some headers
header('Content-Type: image/png');
// < do your magic stuff here >
// Breaks the script because we've sent already some headers and want
// to prevent that TYPO3 is adding another stuff (eg. for debugging purposes)
// that can break the image from loading.
// return FALSE; does not stop doing that!
exit;
}
}
См. также: Вики-сайт Extbase
Доступ к контроллер
Теперь мы настроили пользовательский page type
нам разрешен доступ к контроллеру, вызвав page type
, указанный в настройке TypoScript.
Например. http://www.example.com?type=1234 указывает на renderCaptchaImageAction()
в MyExtbaseController
.
Текучая среда
В Fluid вы можете связать с page type
, который вы настроили:
<img src="{f:link.page(pageType: 1234)}" />
См. также: Жидкая вики
Реальный
Если вы используете расширение realurl
вы можете изменить ?type=1234
на captcha.png
с помощью:
// [...]
'fileName' => array(
'index' => array(
'captcha.png' => array(
'keyValues' => array(
'type' => 1234,
),
),
),
),
// [...]
См. также: Вики-страница Realurl