Вещи, которые я использую снова и снова, - это некоторые помощники в действии. Один загружает и кэширует Модели, другой проверяет параметры, другой управляет предупреждением об ошибках и информационными сообщениями (аналогично flashMessenger, за исключением того, что он работает независимо от того, перенаправляете ли вы _forward или перенаправляете их или обращаетесь к ним внутри текущего запроса). Также некоторые настраиваемые элементы управления формой (например, кнопка «Сохранить» и «Отмена», которые появляются рядом друг с другом без метки) и некоторые помощники представления, которые возвращают href, если у пользователя есть права доступа ACL для посещения модуля / представления / действия. Они являются общими и находятся в общей директории включения, используемой всеми проектами.
У меня была целая куча универсальных классов (например, расширение Zend_Controller_Action), но по мере созревания инфраструктуры они стали реже и реже, потому что поведение можно переносить на более мелкие, более общие помощники и утилиты, которые можно загружать по запросу, по требованию. [Я использую ZF с 0,9]
Модель помощника ниже
//-------------------------------------------------------------------------
/*! \brief loads and caches models
usage in an Action controller: eg
$users = $this->_helper->model( 'User' );
loads MODEL_PATH . User.php
Idea stolen from
http://fedecarg.com/wiki/Module-specific_Models
*/
class LSS_Controller_Action_Helper_Model extends Zend_Controller_Action_Helper_Abstract
{
const PREFIX = 'MODEL_';
//-------------------------------------------------------------------------
/*! \brief return a global instance of the specified model.
Uses Zend_registry to store a cached instance of the model so we don't have to load it
in each function.
You can use sub directories by passing in the class name eg Customer_Session
\param $type string type of value to return
\return model instance
*/
function direct( $name )
{
$regName = self::PREFIX . $name;
if (Zend_Registry::isRegistered( $regName )) return Zend_Registry::get( $regName );
require_once( MODEL_PATH . str_replace( '_', '/', $name ) . '.php' );
$instance = new $name;
Zend_Registry::set( $regName, $instance );
return $instance;
}
}