Подтвердить что ты не робот

Почему Zend Framework так популярен?

Я не тролль, и моя цель - не начать войну пламени; я также не хочу неуважительно относиться к авторам Zend Framework: в нем много прекрасной работы. Но... У меня есть работа, чтобы закончить работу, и мне сложно смириться с популярностью ZF против реальности создания приложений с ней. Мне бы очень хотелось узнать от других, почему они используют Zend Framework.

Я новичок в мире PHP, но я много программировал на многих языках. После прочтения многих учебников и создания нескольких приложений в нем некоторые основные функции Zend Framework чувствуют себя как альфа-код для меня. Для меня следующие основные недостатки, среди прочего, кажутся слишком ошеломляющими, чтобы рассмотреть возможность развертывания приложений с ним, но снова и снова ZF предлагается как одна из ведущих фреймворков if, .

Сначала позвольте мне сказать, что я нахожу большую часть ZF работоспособной. Маршрутизация работает в значительной степени, как и должно быть, средство компоновки является работоспособным (хотя оно очень отличается от систем шаблонов, таких как JSP/ASP), так же как и средство кеширования и т.д. В сообществе, как представляется, наблюдается сложность моделирования (например, проверка) и логику просмотра (например, $this- > headScript() - почему мой контроллер должен заботиться о том, какой файл js файла мне нужен?) в контроллеры, но может быть вопросом использования, а не обязательно ошибка каркаса.

Теперь для пары действительно серьезных (IMO) слабостей, с которыми я столкнулся в свое короткое время с этим. Я содрогаюсь, чтобы представить себе другие области, которые я открою в будущем, если я продолжу строить с ним.

1. Макет формы
Многие люди, похоже, недовольны отсутствием контроля над макетом формы. Как у вас есть популярная структура, в которой для построения простой формы требуется так много обсуждений? Вопрос 1 и вопрос 2.

2. Аутентификация/авторизация
Никто действительно не понимает, как просто выполнять обычную аутентификацию/авторизацию. Люди [в том числе ваши действительно] борются с внедрением простого контроля доступа. Кроме того, подход, похоже, опирался на сериализацию настойчивость, а не на традиционное хранилище данных для пользователей и разрешений. Неверный пример, предложение об улучшении объекта, учебник - часть I, и часть II. Это слишком много работы, ребята!

Являются ли мои воспринимаемые недостатки не реальными или как-то не проблема? Почему или почему нет? Почему вы выбрали Zend Framework (или нет)? Существуют ли другие области, которые, как вы обнаружили, настолько болезненны, что вы хотите сбросить ZF для другого подхода? Спасибо за ваше мнение.

4b9b3361

Ответ 1

Потому что они хороши в маркетинге


Основатели Zend Andi Gutmans и Zeev Suraski являются ключевыми разработчиками PHP

И у них есть одна из самых полных фреймворков для php.

Когда вы думаете об этом; это как сказать:

"Наш язык не настолько совершенен, насколько это возможно, поэтому мы создали структуру с кешированием, которая делает ее более быстрой"

  • Большинство предложений Zend, можно сделать без Zend.
  • Но пакет Zend - очень хороший "Все в одном" дистрибутиве.
  • Они предлагают сертификаты и тренинги.

Ответ 2

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

Ответ 3

Формы:. Декораторный подход сложный, но пуленепробиваемый и бесценный для приложений со многими формами. Вам не важно, есть ли у вас 10 или 25 предметов в вашей форме, стиль всегда один и тот же. Сэкономит вам много работы, когда вы знаете, как ее использовать. Для пользователей с более простыми умами и целями всегда есть декоратор viewScript;)

Auth/Acl: Никогда не возникало проблем с ними.

Zend_Auth::getInstance()->hasIdentity() //logged in

и

Zend_Auth::getInstance()->getIdentity()->role; //returns admin

Для Acl:

$acl->isAllowed($who,  $where, $what);
$acl->isAllowed('roleAdmin', 'resourcePosts', 'create'); //returns true

Может быть легко изменен в соответствии с MVC:

$acl->isAllowed('roleAdmin', $module.ucfirst($controller), $action); //returns true
$acl->isAllowed('roleAdmin', 'adminPosts', 'create'); //returns true

Ответ 4

Цвет меня НЕОБХОДИМО с помощью ZendFramework. Использование Zend Framework похоже на сваривание набора обучающих колес для вашего кода. Все, что вы можете сделать в Zend Framework, - это то, что вы можете сделать в необработанном PHP. (Помните, что ZF сам был написан на необработанном PHP.) И вы можете обычно делать это с таким же количеством строк кода, написанным в согласованном стиле с остальной частью вашего приложения. И, используя собственный PHP-код, вы не заперты в нишевом инструменте, который использует только меньшинство разработчиков PHP. И вам не нужно беспокоиться о совместимости с изменениями в версиях ZF.

В моих приложениях я делаю все то же, что делают инструменты ZF, в основном используя простые функции PHP, которые существуют уже много лет:

  • проверить данные формы
  • очистить ввод формы
  • обрабатывать файлы, загруженные через формы
  • манипулировать и сравнивать даты
  • проверка подлинности
  • отправить электронную почту
  • записать в файлы журнала
  • чтение из конфигурационных файлов
  • чтение внешних HTTP-страниц
  • обмен в форматах JSON и SOAP
  • работать со сторонними API-интерфейсами

Я ничего не могу найти в Zend Framework, который стоит моего времени. И не заставляйте меня начинать с властных структур "подмостей", таких как CodeCoffin, AppShackler или Ruby in Chains.

Ответ 5

ZF является хорошей отправной точкой. Я использовал zend_tool для создания скелета MVC моего приложения среднего размера и использовал множество других компонентов (Zend_Cache, e-mail, translate, forms, session).

И я согласен, что макет формы сложный, если вы пытаетесь сделать это, как говорит Зенд - с декораторами. Есть способы использовать только элементы Zend_Form с проверкой и в вашем пользовательском макете - без декораторов.

У меня был плохой опыт работы с Zend Cookies - я просто не мог установить cookie для всего своего домена. Старые добрые чучела сделали трюк вправо.

О Acl - опять же примеры из документации Zend и Zend_Acl иногда не работают. Я использовал подход плагина контроллера и свое собственное управление ресурсами на основе роли для управления разрешениями.

Я даже не попробовал Zend Data Gateway - вместо этого использовал Doctrine (я думаю, это потому, что мне нравится nHibernate:)) И подключение Doctrine было очень просто.

Я думаю, что ZF хорош, потому что вы можете использовать его по своему усмотрению. Я думаю, что было бы сложнее с некоторыми другими структурами.

Ответ 6

Простота создания приложений среднего размера. До ZF вам приходилось создавать собственные "рамки" для приложений среднего размера. Теперь гораздо проще.

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

Поддержка и community siz e важны в балансе с другими фреймворками.

С точки зрения скорости они НЕ лучше других фреймворков.

Ответ 7

Wel, мы разработчики, потому что мы должны иметь возможность писать "некоторые" из нашего собственного кода, не так ли? Рамки, которые не должны быть волшебниками, просто дополнительная помощь.

Ответ 8

Я не выбрал Zend Framework, потому что в то время, когда я оценивал фреймворки PHP, это было не полное и комплексное решение для создания веб-приложений. Я выбрал symfony, и с тех пор мне никогда не приходилось переключаться ни на что другое.

Я не уверен, что это то же самое в наши дни, но я всегда думал о ZF как библиотеке компонентов, а не о фреймворке. Структура имеет несколько более строгие правила ведения дел и часто имеет лучшие интегрированные инструменты поддержки, которые помогают людям делать это. Компонентная библиотека в этом отношении более свободна. Когда правила фреймворка соответствуют требованиям большинства приложений в инфраструктурном домене, я сам явно предпочитаю это решение. Это было для меня с symfony. Я использую некоторые компоненты ZF по мере необходимости, но никогда не основываю свои проекты на самом ZF.

Ответ 9

Я использую ZF по нескольким причинам: Множество отличных классов, ленивая загрузка классов, автономное использование классов и чистый ясный источник. В первый раз, когда я его использовал, мне нужно было создать систему ACL - очень сложную. Zend_Acl очень помог.

Я думаю, что ZF должен работать над его классами docs и db. Проблемы с классами db имеют много общего с самим PHP. Так что, возможно, это кое-что, на что Zend хочет заглянуть.

OP является новым для PHP. Я согласен, что у PHP есть такие недостатки, как произвольное назначение функций, но в целом это имеет смысл для HTTP и не скрывает от вас реальности.

Ответ 10

Макет формы:

Это очень просто. Декораторы - это боль в прикладе во время вашего первого контакта с ними, они просто черная магия. Затем вы понимаете, насколько они полезны и что вы можете делать с ними что угодно. Когда вы, наконец, достигли точки, где декораторов просто недостаточно, вы можете просто визуализировать отдельные элементы формы в своем представлении или даже написать свой собственный HTML-форму. Рассмотрим этот пример:

Форма

$text = new Zend_Form_Element_Text('text');
$text->addValidator('NotEmpty')->setRequired();
$submit = new Zend_Form_Element_Submit('submit');

Вид

<form>
<input type="text" id="text" name="text" />
<input type="submit" id="submit" name="submit" value="Send" />
</form>

контроллер:

$form = new Form_Whatever();
if ($this->_request->isPost()) {
    if ($form->isValid($this->_request->getPost()) {
        // code
    }
}

Там вы идете. У вас есть форма, вы написали свой HTML вручную, но вы по-прежнему пользуетесь встроенной проверкой ZF. Зачем? Поскольку вы все еще создаете объект формы в контроллере и подаете его данные, отправленные через POST. Вы по-прежнему получаете свои фильтры, валидаторы, все, что хотите. С любым HTML, который вы хотите. И вы также можете подключить внешний вид к форме, если хотите выйти экстремально:).

О, кстати, знаете ли вы, что ваши формы повторно используются? Да, вы можете написать одну форму и использовать ее в нескольких местах. Никаких хлопот. То, что мне лично нравится в формах в ZF (и неприязнь в CodeIgniter - это тоже отличная рамка).

Аутентификация:

Zend Framework: хеш пароля входа в систему, проверка подлинности электронной почты?

Да, это всего лишь небольшая часть кода. Вы в основном копируете и вставляете его в свои проекты.

Что касается ACL, вы просто создаете свои правила, а затем проверяете их, когда вам это нужно. Один вкладыш. Не может быть проще.

Лично я думаю, что ZF популярен, потому что он просто экономит ваши деньги. Если вы ставите меня перед проектом, я могу гарантировать, что я закончу его в два раза быстрее, если вы позволите мне использовать ZF вместо другой структуры, которую я знаю. И, вероятно, часть времени мне понадобится сделать в базовом PHP. Так что об этом: экономя время = экономя деньги. Или зарабатывать вам дополнительные деньги - но одно из двух правил, правильно?

Ответ 11

Нет необходимости использовать Zend_Form или Decorators. Вы можете просто использовать простые HTML-формы, а затем внутри Controller = Действия используют Zend_Filter_Input, как это. Итак, у вас есть лучшее из обоих миров.

public function indexAction()
    {
        $this->view->title = 'Search Results';

        $filters = array('q' => array('StringTrim' , 'StripTags'));
        $validators = array('q' => array('presence' => 'required'));

        $input = new Zend_Filter_Input($filters, $validators, $_GET);

        if ($input->isValid()) {
            $this->view->messages = '';
            $q = $input->getEscaped('q');
            $this->view->q = $q;

            // do search
            try {
                $index = News_Search_Lucene::open(
                    SearchIndexer::getIndexDirectory());

                $results = $index->find($q);
            } catch (Exception $e) {
                $results = array();
            }

            $this->view->results = $results;

        } else {
            $this->view->messages = $input->getMessages();
        }
    }

Ответ 12

Я не уверен, является ли ZF самой популярной базой PHP. Я выбрал его, сравнив его с другими фреймворками, которые делают больше материала "волшебным образом", потому что все они, похоже, трудно настраивать.

Я думаю, что ZF - это хорошая объектно-ориентированная инфраструктура PHP MVC, но я не согласен с некоторыми подходами ZF. Например, я использую только Zend_Form для фильтрации и проверки данных. Все материалы HTML и презентации выполняются при просмотре сценариев. CSS является ответственным за макет. Если нам понадобятся некоторые изменения, большую часть времени меняет только CSS. Если мне нужно сделать ту же форму на многих страницах, я использую ее как частичный вид script.

Мне не нравится писать Mapper для каждой модели и создавать подкласс Zend_Db_Table для каждой таблицы базы данных. Вместо этого я исследую, как использовать другие шаблоны для доступа к данным, или, возможно, Doctrine.

Что мне не нравится в Zend_Acl, так это то, что хранит информацию ACL в файле ACL. Я хотел бы сохранить эту информацию в базе данных.

Хорошая вещь в этой структуре заключается в том, что вы легко делаете свой путь.