Переход от фреймворка к без фреймворка [закрыто]


89

Я занимаюсь PHP в качестве хобби около 8 лет. В 2009 году я взял в руки codeigniter и с тех пор не успел разработать ни одного проекта.

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

Я пробовал CodeIgniter, Kohana и Symfony. Мне нравится простота использования (и я также начал использовать доктрину в качестве ORM, что значительно ускорило мою работу с базой данных), но я считаю, что проекты отнимают у меня в 3-4 раза больше времени, чем на чистом PHP. Мне становится скучно и неприятно, когда я не могу найти решение проблемы, которую я ранее решил на чистом PHP.

Кто-нибудь вернулся от использования фреймворков к подходу без фреймворка. Есть ли что-нибудь вроде базовой структуры безопасности (предотвращение XSS, фильтрация опубликованных данных, предоставление функции очистки для использования с базами данных)? Думаю, что-то подобное принесет мне гораздо больше пользы, чем полноценный фреймворк. Думаю, обучение работе с фреймворками многому меня научило, но мне было бы лучше работать со своим собственным кодом.


5
Я хотел бы услышать больше о том, почему вы сказали, что использование фреймворка занимает в 3-4 раза больше времени по сравнению с отсутствием фреймворка ... не могли бы вы подробнее остановиться на этом?
Lukman

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

1
Отличный вопрос, если у меня когда-нибудь будет выбор, я использую чистый PHP. Но большую часть времени люди, с которыми я работаю, хотят, чтобы я использовал фреймворк, поэтому я просто беру с них дополнительные часы :) Я чувствую, что мой собственный код читабелен, хорошо организован и стабилен. Возможно, они опасаются, что вам придется держать вас в курсе, если произойдет катастрофа, и весь код находится в состоянии «ваш-пользовательский-фреймворк, который-никто-другой-не может-прочитать».
SSH

Ответы:


101

Текущие версии PHP5 включают большую часть инфраструктуры безопасности, которую вы ищете как часть стандартной библиотеки.

  • Используйте filter_input_array для декларативной дезинфекции материалов, поступающих извне.
  • Получите доступ к своей базе данных через PDO с параметризованным SQL для предотвращения атак SQL-инъекций.
  • Используйте следующие настройки PHP, чтобы сделать ваш сайт более устойчивым к фиксации сеанса и краже файлов cookie:
    • session.use_only_cookies (предотвращает утечку токена сеанса в URL-адрес)
    • session.cookie_httponly или httponlyатрибут для session_set_cookie_params () (защищает от скриптов, читающих cookie сеанса в совместимых браузерах)
    • Дополнительные предложения и примеры кода PHP доступны в Википедии .
    • Вы также можете использовать httponlyатрибут с setcookie () .
  • Для новых функций HTTP и HTML5 не требуется ничего более привлекательного, чем базовая настройка шаблонов и заголовков :

Если вы принимаете HTML в качестве входных данных, я рекомендую взять очиститель HTML и вызвать его через строку FILTER_CALLBACK в настройках filter_input_array. Его подход к безопасности ввода, основанный на белых списках, представляет собой отличную (и очень мощную) первую линию защиты от XSS.

Насколько я могу судить, PHP не имеет механизма защиты от подделки межсайтовых запросов , но я уверен, что Google может помочь вам в этом. В недоделках безопасности OWASP включить раздел о нем , если вы хотите реализовать свою собственную защиту.

Из любопытства я решил также начать смотреть на отдельные компоненты, и вот что я нашел на данный момент:

Шаблоны:

  • Наследование шаблонов PHP (Обычный PHP плюс наследование шаблонов)
  • TWIG ( синтаксис в стиле Django / Jinja2 / Liquid, включая автоэскейп и песочницу. Для ускорения компилируется в кэшированный PHP).
  • Dwoo (более быстрый, более функциональный, PHP5-преемник Smarty . Включает систему совместимости для существующих шаблонов Smarty.)

То, что я еще не изучил должным образом:

  • Отправка маршрутов ( пока найдены только RouteMap и Net_URL_Mapper . Спасибо, cweiske.)
  • ORM (на случай, если голый PDO - не ваше дело)

Спасибо, все очень хорошие советы, и я собираюсь начать их изучать!
Alex C

4
Замените Smarty на Dwoo, если вам нужен шаблонизатор. По функциям он почти идентичен Smarty, но не плавит CPU.
Фил Стерджен,

pear.php.net/package/Net_URL_Mapper - диспетчер маршрутов.
cweiske 08

4
Если фреймворки замедляют работу, избегайте движков шаблонов, в частности Smarty, как чумы. Они означают хорошее, но они просто создают новый и неинтуитивный способ делать то, что PHP уже делает.
Night Owl

Зависит от того, чего вы пытаетесь достичь и почему фреймворк просто тормозит вас.
ssokolow 03

10

Я не верю в фреймворки ... Я работал во многих из них.

Причины ненависти к фреймворкам MVC:

1) Раздутие кода, покупаю премиум-классы, которые помогают мне в развитии. Например, классы форм или классы SQL.

2) Я считаю, что фреймворки MVC нелегко переносить, особенно при использовании менеджеров зависимостей.

3) Я считаю, что вы действительно пишете больше кода с помощью инфраструктуры MVC, чем если бы вам пришлось использовать шаблон с множеством полезных классов, которые обрабатывают аутентификацию и т. Д.

4) Большинство фреймворков изначально обслуживают только одну или две базы данных.

Я бы предложил найти структуру формы с аутентификацией и текстовым редактором и структуру sql, такую ​​как madoo + класс электронной почты ...

90% вашего приложения всегда составляют формы, КЛАССЫ sql и ajax - остальное можно просто получить при необходимости.

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


По поводу утверждения «Я покупаю премиум классы»: где и для каких целей вы покупаете такие классы? Спасибо.
dotancohen

Согласен. Кроме того, большое количество фреймворков сильно снижает производительность.
разработчикbmw

8

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


8

Основываясь на вашем заявлении о том, что вы использовали PHP в качестве хобби, а также на заявлении в вашем профиле «Постепенно добираюсь до цели», это похоже на проблему с кривой обучения. Похоже, вы не обладаете глубиной и широтой опыта, чтобы: а) понимать, как работать в рамках структуры, налагаемой фреймворком, и б) таким образом, вы не можете извлечь выгоду из эффективности, которую обеспечивает фреймворк.

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

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


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

Пока я не знаю других фреймворков, поэтому не могу говорить в общих чертах. Но использование фреймворка - это не предложение «все или ничего». Например, я считаю, что библиотеки кэширования CI (страница, база данных) недостаточны и их трудно масштабировать. Поэтому я использую стороннюю кеш-библиотеку (Phil Sturgeon's), и мне она очень нравится.
coolgeek

Еще одно существенное преимущество его использования заключается в том, что он позволяет относительно легко впоследствии изучить другие фреймворки. Вот почему вы часто видите списки вакансий, в которых указывается конкретный фреймворк (скажем, CI), но указывается, что опыт работы с аналогичными фреймворками (скажем, Zend или Symfony) будет рассмотрен.
coolgeek

2

Zend Framework действительно подходит для этого. Вы можете использовать столько, сколько хотите. Он написан на php и имеет открытый исходный код, так что вы можете просто взломать его и сделать своим собственным. Различные компоненты не зависят друг от друга так сильно, как в других фреймворках.

Вы можете без проблем создать простой фреймворк, используя некоторые компоненты Zend.

Проверить это!


3
Он пытается уйти от рамок.
WarmWaffles

1
@WarmWaffles. Вот почему я говорил об использовании частей ZF. Конечно, вы не ожидаете, что этот парень изобретет велосипед для всего.
Iznogood 07

2
У Изногуда очень хорошая точка зрения. ZF - это больше, чем просто фреймворк. Я обнаружил, что пакеты чрезвычайно полезны для выполнения множества общих задач, и в этом нет ничего, что заставляло бы вас использовать их шаблоны MVC или их методы доступа к БД или что-то еще. Конечно, вы также можете использовать модули Pear.
Боб Баддели,

2
Да, это библиотека, которая также поддерживает фреймворк. Однако он ищет что-то простое в использовании, и в прошлый раз, когда я проверил, пространство имен Zend загромождено и набирать текст затруднительно. @Bob_Baddeley PEAR - хорошее предложение
WarmWaffles

@WarmWaffles Думаю, каждому свое. Возможно, вы могли бы перепроверить Zend сейчас на уровне 1.10.x, и он будет сильно отличаться от версии 1.8.
Изногуд 08

2

Я точно знаю, как ты себя чувствуешь. Я начал 4-5 лет назад с PHP (я пришел из Delphi, смеется) и начал с чистого php. То, что у меня было обратно, было «панелью CMS как», которая просто читала все поля таблиц и создавала форму. Через некоторое время я каким-то образом достиг знания PHP Frameworks, я сначала попробовал CakePHP, и мне не понравилось, после чего я попал в Yii, который, на мой взгляд, довольно интуитивно понятен и прост в использовании (с его генератором Gii он довольно хорош). Я пробовал Symfony, ZF2, Laravel, Yii2-Beta и некоторые фреймворки для RAD, но все же я не чувствовал себя достаточно быстрым, как до фреймворков.

Случилось так, что я разработал свой собственный фреймворк (это было естественно, не совсем то, что я однажды проснулся и сказал: «Я собираюсь создать новый фреймворк», случилось со временем). Я знаю, что это плохая плохая практика и ход «переделывать колесо», НО теперь я разрабатываю свои проекты намного быстрее (больше, чем только PHP).

Поскольку его код - это полная MESS, около месяца назад я начал переформулировать свою структуру, теперь он использует композитор, следует общим правилам, существующим между фреймворками php, - это MVC.

Почему я переформулирую? Потому что, если кому-то понадобится отремонтировать мой проект, это не будет чем-то другим.

Итак, я вас понимаю.

Мой совет: подготовьте свои инструменты (назовите это фреймворком, предустановленным приложением или как там люди его называют) и используйте их так, как вам удобнее, но все же следуйте некоторым общим правилам (например, MVC, вещи, которые легко модулировать Вы можете заменить в случае поломки.


1

Для базовой безопасности я использую специальный метод фильтрации, который закрывает мои суперглобальные данные . Его синтаксис требует некоторого привыкания, но он проще, чем PHP filter_var () API, и не позволяет избежать дезинфекции:

 $_GET->text("inputvar") or $_POST->name["field"]

Также разрешено экранирование строки $ _REQUEST-> sql (). Но для работы с базой данных продолжайте использовать параметризованный SQL или ваш выбор DAL / ORM.


Это определенно умное решение, но я не уверен, почему вы считаете API фильтра громоздким. Во всяком случае, я считаю filter_input_array () превосходным. (В первую очередь потому, что это упрощает определение всех входных данных для данного типа запроса в одном месте в разумно декларативной манере. Никогда не недооценивайте преимущества такого рода вещей.)
ssokolow

@ssokolow: Действительно, filter_input_array () отлично справляется с этим одним махом. Однако в функциях filter_ * уже есть слишком большая гибкость, и слишком много параметров им не подходят. Вот почему я думаю, что люди избегают этого (хотя технически это хорошее решение).
Марио

Возможно. Я думаю, что отчасти проблема заключается в том, что, помимо того, что он появился недавно в мире, где у многих людей все еще есть книги по PHP4 на полках, он недостаточно рекламируется, официальная документация недостаточно ясна, а документы W3Schools которые, как правило, делятся лучшими результатами Google, недостаточно полны.
ssokolow

1

Я провел однодневное исследование ToroPHP, и он мне понравился . Это минималистичный фреймворк, ориентированный на приложения RESTful. Это позволяет сохранить модульность кода на стороне сервера без необходимости иметь дело с раздуванием какой-либо инфраструктуры.


1

Я не знаю, что вас беспокоит, но codeigniter - отличный фреймворк. У него хорошая документация, и, поскольку многие люди используют codeigniter, вы найдете всю помощь в его документации, на форуме или в stackoverflow. Я работал со многими фреймворками ( Codeigniter, CakePHP, Zend, Spring 3.0, Ruby on Rails), но я должен сказать, что codeigniter имеет лучшую документацию. В codeigiter есть много вещей, которые обрабатываются автоматически, и вам не нужно беспокоиться о безопасности. Работа над ядром PHP похожа на изобретение колеса заново. Что ж, самое главное, что переход от ядра к фреймворку потребует больших усилий, когда вы привыкнете к нему, вы начнете любить его. Кроме того, Ruby on rails также является отличным фреймворком, если вы знаете его все тонкости и вы можете иметь двойную скорость.


2
Прошло чуть больше двух лет с тех пор, как я опубликовал это, и я действительно какое-то время работал с чистым PHP, но с тех пор перешел на PHP - вы совершенно правы, он невероятно прост в использовании. В настоящее время я предпочитаю использовать CI, phpActiveRecord для баз данных и Twig для создания шаблонов.
Alex C

Да, phpActiveRecord выглядит неплохо. Вы когда-нибудь пробовали Laravel? ( laravel.com ) Думаю, вы обнаружите, что по умолчанию в него встроены лучшие функции CI, phpActiveRecord и Twig. Я сам был разработчиком CakePHP, но в последнее время внимательно смотрю на Laravel.
Саймон Ист
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.