Magento: когда передавать переменные в блок, а когда нет? - PullRequest
2 голосов
/ 10 октября 2010

Недавно я нашел возможность задания переменных для блока в методе _toHtml (), используя метод assign. Мой вопрос: когда это хорошо, а когда нет? Я создаю новый модуль, и мне кажется, что очень приятно просто назначить все переменные блоку и просто ссылаться на эти переменные в файле представления, а не настраивать что-то вроде этого

<?php
  $var1 = $this->getVar1();
  $var2 = $this->getVar2();
?>

<div id="<?php echo $var1 ?>"><?php echo $var2 ?></div>

Не лучше ли просто установить их в классе блоков и просто вызвать переменные в файле phtml? Тогда ваш файл шаблона будет выглядеть как

<div id="<?php echo $var1 ?>"><?php echo $var2 ?></div>

Это уберет больше php-кода из шаблона, что я считаю хорошим?

Единственное, о чем я могу подумать, это то, что будет сложнее узнать, какие переменные установлены, когда другие разработчики работают с файлом шаблона. Если я помещу комментарий вверху, что все переменные в основном установлены в классе блока x, который поможет, или если они будут отлаживать, они увидят все установленные переменные, но я думаю, что это может сбить с толку, и я предполагаю, что именно поэтому Magento только сделал это экономно.

Но я ищу чье-либо мнение по этому поводу для наилучшей практики.

1 Ответ

1 голос
/ 10 октября 2010

«Правильный» путь в Magento может быть ближе к этому:

<div id="<?php echo $this->getVar1(); ?>"><?php echo $this->getVar2(); ?></div>

Наличие меньшего количества кода может быть хорошей вещью, но только тогда, когда вы понимаете компромиссы. Ради сохранения двух строк (или без строк, если вы используете вышеописанную технику), вы фактически теряете некоторую гибкость.

Причина, по которой Magento так сильно зависит от магических get* и set* методов, заключается в том, что они могут быть переопределены в классе прозрачным способом.

Допустим, ради аргумента, что в будущем кто-то переопределит ваш класс и решит, что var1 следует рассчитывать на лету, а не устанавливать статически (это может случаться не часто, но Вариену нужно было принять это во внимание для основных классов). Если вы устанавливаете переменные вручную и используете их как таковые, это, вероятно, потребует изменения нескольких ссылок в коде. Однако, используя магические get* методы, вычисления для атрибутов намного проще:

public function getVar1() {
    $value = $this->_getData('var1');
    // perform calculations here
    return $value;
}

Эта формулировка даже не блокирует эквивалент set* вызова, а также не требует каких-либо обновлений кода, основанного на этом методе. Поэтому, когда можете, используйте магические методы, так как они более идиоматичны для фреймворка и позволят вам и другим максимально гибко работать с вашими дополнениями кода.

Надеюсь, это поможет!

Спасибо, Джо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...