Авг 29
На сайте разработчиков Zend Framework еще в конце июня появилась статья об интеграции Zend_Acl и парадигмы MVC. Несмотря на полезность и актуальность информации, до сих пор я не встречал перевода этой статьи на русский язык. Ниже приведена моя попытка исправить это. Кроме того, я уже заканчиваю перевод продолжения этого материала, поэтому к понедельнику выложу и его.
Так что же не правильного в компоненте Zend_Acl и текущей реализации MVC в Zend Framework? Нет ничего неправильного, просто для разработчиков не вполне очевидно, как достичь оптимальной интеграции этих двух важнейших частей фреймворка.
Стоит отметить, что данная статья основана на текущих Предложениях к Zend Framework (ссылка), но в данный момент эти рекомендации находятся на утверждении. Окей! Как это работает? Для реализации этого в Предложениях существует два ключевых компонента:
- Плагин фронт-контроллера (Front Controller Plugin). Этот компонент проверяет, имеет ли текущий пользователь доступ к запрашиваемой странице.
- Помощник действий (Action Helper). Этот компонент позволяет делать проверку прав доступа пользователя внутри контроллера действий.
Давайте возьмем за основу эти два компонента, и попробуем воспользоваться ими на примере. В дальнейшем мы будем вести разговор о сайте на подобии DevZone. Нам будут необходимы один контроллер, который управляет администрированием пользователей, и второй – для управления статьями. Также нам нужны 3 типа пользователей (ролей): один для гостей, второй – для авторов, и еще один, с помощью которого мы будем утверждать статьи. Вот все что нам нужно:
Ресурсы:
- Контроллер user.
- Контроллер article.
Роли:
Автор: Кирилл Павлюков
\\ Метки: PHP, Zend Framework, Zend_Acl, перевод, плагин, пример
Мар 17
В ноябре прошлого года я разрабатывал проект, использующий Zend Framework и Smarty.
Как я уже недавно писал, мой любимый визуальній редактор – Spaw Editor от компании Solmetra.
А вот пример того, как можно написать плагин для Smarty для быстрой вставки редактора в тело страницы. Думаю, что комментировать код нет необходимости – тут и так все понятно. Кроме того, модифицировав всего пару строк, можно исключить Zend Framework, если ваш проект не использует его.
И еще: этот плагин писался под конкретный проект, поэтому в нем реализовано лишь то, что было необходимо мне. Вполне вероятно, что вам окажется недостаточно такой функциональности.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| <?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/
/**
* Smarty {spaw} function plugin
*
* Type: function
* Name: spaw
* Date: Nov 11, 2007
* Purpose: automate creation Spaw Editor
* Input:
* - name = name of textarea, default - 'Text'
* - value = default value
* - lang =
* - toolbarset
* - theme
* - width
* - height
* - stylesheet
* - page_caption
* Examples:
* <pre>
* {spaw}
* {spaw name='Description' lang='en'}
*
* @version 1.0
* @author Kirill Pavliukov <kirill></kirill>
* @param array
* @param Smarty
* @return string
* @todo Spaw Pages
*/
function smarty_function_spaw($params, &$smarty)
{
if (!defined('WWW_DIR')) define('WWW_DIR',$_SERVER['DOCUMENT_ROOT']);
$name = ((isset($params['name'])) ? $params['name'] : null);
$value = ((isset($params['name'])) ? $params['value'] : '');
$lang = ((isset($params['lang'])) ? $params['lang'] : null);
$toolbarset = ((isset($params['toolbarset'])) ? $params['toolbarset'] : '');
$theme = ((isset($params['theme'])) ? $params['theme'] : '');
$width = ((isset($params['width'])) ? $params['width'] : '');
$height = ((isset($params['height'])) ? $params['height'] : '');
$stylesheet = ((isset($params['stylesheet'])) ? $params['stylesheet'] : '');
$page_caption= ((isset($params['page_caption'])) ? $params['page_caption'] : '');
if ($name == null) $smarty->trigger_error('(SPAW) Parameter `Name` must be specified');
if ($lang == null) {
$front = Zend_Controller_Front::getInstance();
$lang = $front->getRequest()->getParam('language');
}
$pages = ((isset($params['pages'])) ? $params['pages'] : null);
if ($name == '') $name = 'Text';
require_once(WWW_DIR . 'spaw2/spaw.inc.php');
$spaw = new SpawEditor($name, $value, $lang, $toolbarset, $theme, $width, $height, $stylesheet, $page_caption);
if ($pages) {
$pages = split(';',$pages);
foreach ($pages as &$page) {
$page = split('::',$page);
if (!isset($page[0]) or empty($page[0])) $smarty->trigger_error('(SPAW) Page name myst be specified!');
if (!isset($page[1]) or empty($page[1])) $smarty->trigger_error('(SPAW) Page caption myst be specified!');
if (!isset($page[2])) $page[2] = '';
if (!isset($page[3])) $page[3] = 'ltr';
$spawPage = new SpawEditorPage($page[0],$page[1],$page[2],$page[3]);
$spaw->addPage($spawPage);
}
}
$spaw->show();
}
?> |
Автор: Кирилл Павлюков
\\ Метки: PHP, Smarty, SPAW, Zend Framework, плагин
Свежие комментарии