Я обновляю приложение CakePHP 1.3 до CakePHP 2.9.6.
Наш ExtendedFormHelper (расширяет AppHelper) содержит функцию afterRender, которая используется для добавления сценариев после визуализации содержимого.
В версии 1.3 все это работает правильно. Однако в версии 2.x функция afterRender вызывается до отображения любого содержимого. (проверил, поставив die();
в функции afterRender и я просто получаю пустую страницу)
Я также пытался с обратным вызовом afterLayout, но это та же проблема.
Я использую файл макета, который содержит $this->fetch('content')
,
Кто-нибудь может указать мне правильное направление относительно того, почему это может происходить? Я проверил документацию, но, насколько я вижу, обратный вызов должен работать так же.
РЕДАКТИРОВАТЬ:
функция afterRender в расширенном помощнике:
function afterRender($viewFile) {
if (strlen($this->body) > 0) {
$this->_View->start('afterRenderBody');
echo $this->body;
$this->_View->end();
}
$afterRenderScripts = "";
if (strlen($this->script) > 0) {
$afterRenderScripts .= $this->functions;
$afterRenderScripts .= 'jQuery(document).ready(function ($) {';
if (!empty($this->formId)) {
foreach ($this->formId as $formId) {
$afterRenderScripts .= $this->_View->element('extended_form/validate/after_render_script', array('formId' => $formId, 'rules' => $this->rules));
}
}
$afterRenderScripts .= $this->script;
$afterRenderScripts .= '});';
}$afterRenderScripts .= "jQuery(document).ready(function($) {
console.log('some extra scripts');
});";
//echo '<script type="text/javascript">' . $afterRenderScripts . "</script>";
$this->Html->scriptBlock($afterRenderScripts, array('block' => 'afterRenderScripts', 'inline' => false));
}
$ this-> body и $ this-> script — это всего лишь 2 переменные в моем помощнике.
Задача ещё не решена.
Других решений пока нет …