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


89

Я займаюся PHP близько 8 років як хобі. У 2009 році я взяв програмний код і з тих пір мені не вдалося розробити жодного проекту.

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

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

Хтось повернувся від використання фреймворків до безфреймового підходу. Чи існує щось на зразок базової системи безпеки (запобігти XSS, фільтрувати розміщені дані, забезпечити функцію очищення для використання з базами даних)? Я думаю, що щось подібне принесло б мені користь набагато більше, ніж повномасштабна система. Я думаю, що навчитись працювати з фреймворками навчило мене багато чому, але я був би щасливішим, працюючи зі своїм власним кодом.


5
я хотів би почути більше про те, чому ви сказали про використання фреймворку, який займає 3-4 рази часу порівняно з no-framework.
Лукман

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

1
Чудове питання, якщо у мене колись буде вибір, я використовую чистий PHP. Але здебільшого люди, над якими я працюю, хочуть, щоб я використовував фреймворк, тому я просто беру їм додаткові години :) Я відчуваю, що мій власний код читабельний, добре організований і стабільний. Можливо, вони бояться тримати вас на борту, якщо трапиться катастрофа, і весь код перебуває у стані "ваш-користувальницький фреймворк, який ніхто не може прочитати".
SSH цього

Відповіді:


101

Поточні версії PHP5 містять значну частину системи безпеки, яку ви шукаєте як частину стандартної бібліотеки.

Якщо ви приймаєте HTML як вхід, рекомендую взяти HTML-очищувач і викликати його через рядок FILTER_CALLBACK у налаштуваннях filter_input_array. Його підхід, що ґрунтується на "білих списках", забезпечує чудову (і дуже потужну) першу лінію захисту від XSS.

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

З цікавості я вирішив також почати розглядати окремі компоненти, і ось що я знайшов на даний момент:

Шаблонування:

Матеріали, які я досі не розглядав належним чином:

  • Диспетчеризація маршруту ( Наразі знайдено лише RouteMap та Net_URL_Mapper . Дякую, cweiske.)
  • ORM (Про всяк випадок, якщо голий PDO - це не твоя річ)

Дякую, всі дуже добрі поради, і я зараз почну їх розглядати!
Alex C,

4
Замініть Smarty на Dwoo, якщо вам потрібен шаблонний механізм. В основному він майже ідентичний Smarty, але не плавить процесор.
Філ Стерджен

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

4
Якщо фреймворки сповільнюють вашу роботу, тоді уникайте шаблонів двигунів, зокрема Smarty, як чума. Вони добре означають, але вони просто створюють новий і неінтуїтивний спосіб робити те, що вже робить PHP.
Нічна сова

Залежить від того, що ви намагаєтесь досягти, і чому фреймворк просто уповільнює вас.
ssokolow

10

Я не вірю в рамки ... Я працював у багатьох з них.

Причини ненавидіти рамки MVC:

1) Code bloat, я купую преміум-класи, які допомагають мені в розвитку. Такі як класи форм або класи SQL.

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

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

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

Я б запропонував знайти фреймворк форми з автентифікацією та текстовим редактором та фреймворк sql, такий як madoo + клас електронної пошти ...

90% вашої заявки - це завжди форми, sql & ajax КЛАСИ - решту можна просто придбати за потреби

Я мінімаліст, і я борюся з ідеєю наявності коду в моїй програмі, який нічого не робить ... про всяк випадок, коли мені це потрібно, це не працює для мене.


Щодо твердження "Я купую преміум-класи": звідки ви купуєте такі класи і для яких цілей? Дякую.
dotancohen

Я згоден. Також є значний хіт продуктивності з великою кількістю фреймворків.
developerbmw

8

Маючи стільки досвіду за плечима, ви повинні мати власний набір улюблених бібліотек, відбирати їх вручну та створювати власну просту структуру. Структура чи відсутність (і який саме) залежить від типу проекту, жодна рукавичка не підходить для всіх. Тому я настійно рекомендую, якщо ви відчуваєте, що існуючі фреймворки гальмують вас, витратьте час і придумайте структуру, яка працює відповідно до ваших потреб.


8

Виходячи з вашого твердження про те, що ви використовуєте PHP як своє хобі, а також вашого твердження в профілі "Повільно добиратися", це здається проблемою кривої навчання. Ви, мабуть, не маєте глибини та широти досвіду, щоб а) зрозуміти, як працювати в структурі, яку накладає фреймворк, і б) Ви, таким чином, не можете отримати вигоду від ефективності, яку дає фреймворк.

Я закликаю вас дотримуватися цього. Поверніться на початок із відеоуроками. Знайдіть і читайте код інших людей, поки ви його не зрозумієте. Створюйте свої проекти знизу вгору - починайте просто і додайте функціональність. Слідкуйте за форумами, намагаючись відповісти на запитання самостійно, перш ніж читати відповіді.

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


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

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

Ще однією суттєвою перевагою дотримання цього є те, що це дозволяє порівняно легко вивчати інші рамки. Ось чому ви часто бачите списки вакансій, що вказують певний фреймворк (скажімо, CI), але заявляючи, що враховуватимуться досвід роботи з подібними фреймворками (скажімо, Zend або Symfony).
coolgeek

2

Zend Framework справді супер для цього. Ви можете використовувати скільки завгодно чи мало. Це все закодовано у php та з відкритим кодом, так що ви можете просто зламати його та зробити своїм власним. Різні компоненти не залежать один від одного настільки сильно, як в інших рамках.

Ви можете створити собі простий фреймворк, використовуючи деякі компоненти від Zend без будь-яких проблем.

Перевірте це!


3
Він намагається відійти від рамки.
WarmWaffles

1
@WarmWaffles. Саме тому я говорив про використання частин ZF. Звичайно, ви не очікуєте, що хлопець за все винайде колесо.
Iznood

2
Ізногуд має дуже хороший момент. ZF - це більше, ніж просто фреймворк. Я знайшов пакети надзвичайно корисними для виконання багатьох загальних завдань, і в ньому немає нічого, що змушує вас використовувати їхні шаблони MVC, їхні методи доступу до БД або щось інше. Звичайно, ви також можете просто скористатися модулями Pear.
Bob Baddeley,

2
Це бібліотека, яка також має спортивні рамки. Однак він шукає щось просте у використанні, і останнього разу, коли я перевірив, простір імен Зенда захаращений і боляче друкувати. @Bob_Baddeley PEAR - хороша порада
WarmWaffles

@WarmWaffles Ну, кожному своє, я думаю. Можливо, ви могли б перевірити Zend на 1.10.x зараз, і зовсім інше, ніж 1.8.
Iznogood

2

Я точно знаю, як ти почуваєшся. Я почав 4 ~ 5 років тому в PHP (я прийшов з Delphi, ха-ха), а почав із чистого php. Що у мене було назад, це "Панель керування вмістом", яка просто прочитала всі поля таблиць і створила форму. Через деякий час я якось досягнув знань PHP Frameworks, я спершу спробував CakePHP, і мені не сподобалося, після того, як я потрапив до Yii, який, на мій погляд, досить інтуїтивний та простий у використанні (з його генератором Gii він досить сильно гойдається). Я пробував Symfony, ZF2, Laravel, Yii2-Beta та деякі фреймворки для RAD, але все одно я почувався недостатньо швидко, як до фреймворків.

Було так, що я розробив свою власну структуру (Це було природно, не зовсім так, що колись я прокинувся і сказав: "Я збираюся створити нову структуру", це сталося з часом). Я знаю, що це погана погана погана практика і рух "переосмислення колеса", АЛЕ зараз я розробляю свої проекти набагато швидше (більше, ніж лише PHP).

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

Чому я переформулюю? Бо якщо комусь потрібно відремонтувати мій проект, це не буде іншою світовою справою.

Тож я вас розумію.

Моя порада - підготуйте свої інструменти (назвіть їх фреймворком, заздалегідь встановленим додатком або як завгодно люди їх називають) і використовуйте їх так, як вам краще, але все одно дотримуйтесь деяких загальних правил (наприклад, MVC, "легко модулювати" речі, які ви можете замінити у випадку поломки.


1

Для базової безпеки я використовую власний метод фільтрації, який обгортає мої суперглобали . До його синтаксису потрібно трохи звикнути, але він простіший, ніж API PHP filter_var (), і не дозволяє пропустити дезінфекцію:

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

Це також дозволило вбудований скрипт $ _REQUEST-> sql (). Але для роботи з базами даних використовуйте параметризований SQL або вибраний вами DAL / ORM.


Це, безумовно, розумне рішення, але я не впевнений, чому ви вважаєте API фільтру громіздким. Якщо що, я вважаю filter_input_array () чудовим. (Передусім тому, що це дозволяє легко визначити всі вхідні дані для даного типу запиту в одному місці розумно декларативно. Ніколи не недооцінюйте переваги такого роду речей.)
ssokolow,

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

Можливо. Я думаю, що частина проблеми полягає в тому, що, крім нещодавнього прибуття у світ, де багато людей досі мають на полицях книги 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.