Concrete5 - Почему мой контроллер блока set() не работает?

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

Проблема в том, что я считаю, что у меня нет данных / переменных.

controller.php

public $unlocked = false;
public $employer;
public $shortname = "not loaded";

public function on_page_view() { //already overridden because I'm compiling LESS
    ...
    $this->setViewVariables(); 
}

function setViewVariables() {
    $this->set('shortname', $this->shortname);
    $this->set('is_unlocked', $this->unlocked);
    ...
}

public function action_accesscode_unlock() {
    $this->unlocked = true;
    $this->shortname = "fred";
    //Have also tried calling $this->setViewVariables(); as well, 
    //before I realised view() and on_page_view() were called after this anyway
}

view.php

<?php if ( !$is_unlocked ) { 
    echo $shortname; //does correctly display the default value
?>
    <form action="<?php echo $this->action('accesscode_unlock')?>" id="accessform" method="post">
        ...
    </form>

<?php } else {

     //THIS section is never displayed (always reloads form with default name)
     echo $shortname;

} ?>

Что я делаю не так, чтобы новые значения переменных никогда не устанавливались в представлении?

редактировать

После ответа на JohnTheFish, который я только что понял, код компиляции LESS, который я использую, включает в себя следующие строки (используемые для получения пути блока). Может ли это быть изменением экземпляра, используемого для разных частей жизненного цикла?

$bv = new BlockView();
$bv->setController($this);
$bv->setBlockObject($this->getBlockObject());

1 ответ

Решение

on_page_view выполняется до action_accesscode_unlock, поэтому логика action_accesscode_unlock не происходит до тех пор, пока не установлены переменные.

Вы можете попробовать добавить вызов setViewVariables в конец action_accesscode_unlock.

(В ответ на ваше редактирование, да, это может)

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