2010-07-21 5 views
2

Как проверить, установлен ли Zend View Placeholder перед его эхо-сигналом? Поскольку я хочу добавить «-» к нему, прежде чем выводить его.Zend Framework: проверьте, не является ли Zend View Placeholder iset

Я попытался

echo isset($this->placeholder('title')) 
    ? ' - ' . $this->placeholder('title') 
    : ''; 

Но я получил

Fatal error: Can't use method return value in write context in D:\Projects\Websites\php\ZendFramework\LearningZF\application\layouts\scripts\layout.phtml on line 5

На стороне записки, как приходят, когда я получил эту ошибку, почему он не показан в Error View Script? Ошибка была показана на пустой странице без макета.

ответ

3

Для причины фатальной ошибки см. Вопрос PHP : can’t use method return value in write context.

Таким образом, вы можете использовать временную переменную или $this->placeholder()->getRegistry()->containerExists("key"), которая возвращает логическое значение.

echo ($this->placeholder()->getRegistry()->containerExists("title")) ? " - " . $this->placeholder("title") : ""; 
+0

Это была отличная идея в теории, но я получил Fatal Error с вашим решением .. :(плюс я обнаружил гораздо более простой. –

0

Warning: Missing argument 1 for Zend_View_Helper_Placeholder::placeholder() in /library/Zend/View/Helper/Placeholder.php on line 72

Notice: Undefined variable: name in /library/Zend/View/Helper/Placeholder.php on line 74

Fatal error: Call to undefined method Zend_View_Helper_Placeholder_Container::getRegistry() in /path/to/index.phtml on line 109

За мой комментарий к ответу Бенджамина Кримера (фатальная ошибка показано выше), я придумал хороший простое решение:

$content = $this->placeholder('placeholderName')->getValue(); 
if (!empty($content)) { 
    echo $content; 
} 
1

Другой способ сделать это:

// get a placeholder registry instance and create a container 
$registry = Zend_View_Helper_Placeholder_Registry::getRegistry(); 
$myPlaceholder = $registry->createContainer('myPlaceholder'); 

Затем вы можете проверить, существует ли заполнитель:

$registry->containerExists('myPlaceholder') 

Или проверить содержимое вашего заполнителя с:

$myPlaceholder->getValue(); 

И, конечно же, делают просто повторяя его.

Смежные вопросы