Przejście od frameworka do braku frameworka [zamknięte]

89

Jako hobby rozwijam się w PHP od około 8 lat. W 2009 roku sięgnąłem po Codeignitera i od tego czasu nie udało mi się stworzyć ani jednego projektu.

Uważam, że spowalnia mnie to, próbując wymyślić, jak go zmodyfikować, aby działał tak, jak chcę, gdybym pracował w czystym PHP, wiedziałbym lub byłbym w stanie szybko znaleźć fragment kodu.

Próbowałem CodeIgniter, Kohana i Symfony. Uwielbiam łatwość użycia (a także zacząłem używać doctrine jako ORM, co znacznie przyspieszyło moją pracę z bazą danych), ale uważam, że projekty zajmują mi 3-4 razy więcej czasu niż w czystym PHP. Nudzę się i denerwuję, gdy nie mogę znaleźć rozwiązania problemu, który wcześniej rozwiązałem w czystym PHP.

Czy ktoś wrócił z używania frameworków do podejścia bez ram. Czy istnieje coś takiego jak podstawowa struktura bezpieczeństwa (zapobieganie XSS, filtrowanie opublikowanych danych, zapewnienie funkcji czyszczenia do użytku z bazami danych)? Myślę, że coś takiego przyniosłoby mi dużo więcej korzyści niż ramy na pełną skalę. Myślę, że nauka pracy z frameworkami wiele mnie nauczyła, ale praca z własnym kodem byłabym szczęśliwsza.

Alex C
źródło
5
chciałbym usłyszeć więcej o tym, dlaczego powiedziałeś o używaniu frameworka, które zajmuje 3-4 razy więcej czasu niż w przypadku braku frameworka.
Lukman,
7
Jedną z zalet CI lub jakiejkolwiek struktury jest to, że zmusza cię do stworzenia wzorca projektowego, który jest łatwiejszy do utrzymania dla deweloperów, którzy nie są przyzwyczajeni do twojego konkretnego stylu programowania. Ponadto w większych środowiskach oddzielenie widoków od logiki jest niezbędne, aby Twoi guru CSS mogli robić swoje bez nadeptywania programistów.
Kyle Noland
1
Świetne pytanie, jeśli kiedykolwiek będę miał wybór, używam czystego PHP. Ale przez większość czasu ludzie, dla których pracuję, chcą, żebym używał frameworka, więc po prostu naliczam im dodatkowe godziny :) Czuję, że mój własny kod jest czytelny, dobrze zorganizowany i stabilny. Być może obawiają się, że będą musieli zatrzymać Cię na pokładzie, jeśli dojdzie do katastrofy, a cały kod jest w stanie „Twoja-niestandardowa-struktura-nikt-inny-nie może-odczytać”.
SSH

Odpowiedzi:

101

Bieżące wersje PHP5 zawierają znaczną część struktury bezpieczeństwa, której szukasz, jako część standardowej biblioteki.

Jeśli akceptujesz HTML jako dane wejściowe, polecam pobranie HTML Purifier i wywołanie go za pomocą linii FILTER_CALLBACK w konfiguracji filter_input_array . Oparte na białej liście podejście do bezpieczeństwa danych wejściowych stanowi doskonałą (i bardzo potężną) pierwszą linię obrony przed XSS.

O ile wiem, PHP nie zawiera mechanizmu chroniącego przed fałszowaniem żądań między witrynami , ale jestem pewien, że Google może Ci w tym pomóc. W OWASP zabezpieczeń Cheatsheets zawierać sekcję na to, czy chcesz, aby zaimplementować własną ochronę.

Z ciekawości postanowiłem też przyjrzeć się samodzielnym komponentom i oto co znalazłem do tej pory:

Szablony:

  • Dziedziczenie szablonów PHP (zwykłe dziedziczenie szablonów PHP plus)
  • TWIG ( składnia w stylu Django / Jinja2 / Liquid, w tym autoescape i sandboxing. Kompiluje się do buforowanego PHP dla szybkości).
  • Dwoo (szybszy, bardziej funkcjonalny, następca Smarty w PHP5 . Zawiera system kompatybilności dla istniejących szablonów Smarty.)

Rzeczy, których nadal nie sprawdziłem poprawnie:

ssokolow
źródło
Dzięki, wszystkie bardzo dobre rady i zacznę teraz je przeglądać!
Alex C,
4
Zamień Smarty'ego na Dwoo, jeśli potrzebujesz silnika szablonów. Funkcjonalnie jest prawie identyczny ze Smarty, ale nie topi procesora.
Phil Sturgeon
pear.php.net/package/Net_URL_Mapper to dyspozytor tras.
cweiske
4
Jeśli frameworki spowalniają, unikaj szablonów silników, w szczególności Smarty'ego, jak zarazy. Chcą dobrze, ale po prostu tworzą nowy i nieintuicyjny sposób robienia czegoś, co już robi PHP.
Night Owl
Zależy od tego, co próbujesz osiągnąć i dlaczego struktura po prostu Cię spowalnia.
ssokolow
10

Nie wierzę w frameworki ... Pracowałem w wielu z nich.

Powody nienawiści do frameworków MVC:

1) Nadużywanie kodu, kupuję klasy premium, które pomagają mi w rozwoju. Takich jak klasy formularzy lub klasy SQL.

2) Uważam, że frameworki MVC nie są łatwe do przenoszenia, zwłaszcza gdy używa się menedżerów zależności.

3) Uważam, że w rzeczywistości piszesz więcej kodu za pomocą frameworka MVC, niż gdybyś musiał użyć standardowego schematu z mnóstwem przydatnych klas, które obsługują uwierzytelnianie itp.

4) Większość frameworków obsługuje również natywnie tylko jedną lub dwie bazy danych.

Sugerowałbym znalezienie frameworka formularzy z uwierzytelnianiem i edytorem tekstu oraz frameworku sql, takim jak madoo + klasa e-mail ...

90% aplikacji to zawsze formularze, klasy sql i ajax - resztę można po prostu nabyć w razie potrzeby

Jestem minimalistą i zmagam się z pomysłem posiadania w mojej aplikacji kodu, który nic nie robi ... na wszelki wypadek nie działa dla mnie.

Jugger
źródło
Odnośnie stwierdzenia „Kupuję klasy premium”: skąd kupujesz takie klasy i w jakim celu? Dzięki.
dotancohen,
Zgadzam się. Istnieje również spory hit wydajnościowy z wieloma frameworkami.
developerbmw
8

Mając za sobą tak duże doświadczenie, musisz mieć swój własny zestaw ulubionych bibliotek, wybrać je ręcznie i wymyślić własną prostą strukturę. Framework lub brak frameworka (i który z nich) zależy od rodzaju projektu, żadna rękawica nie pasuje do wszystkich. Więc zdecydowanie sugerowałbym, że jeśli uważasz, że istniejące frameworki spowalniają cię, spędź trochę czasu i wymyśl ramy, które działają zgodnie z twoimi potrzebami.

Sabeen Malik
źródło
8

Opierając się na Twoim stwierdzeniu, że używasz PHP jako hobby, a także na stwierdzeniu w profilu „Powolne osiąganie celu”, wydaje się, że jest to problem z krzywą uczenia się. Wydaje się, że nie masz dogłębnego i rozległego doświadczenia, aby a) zrozumieć, jak pracować w ramach struktury, którą narzuca ramy oraz b) w ten sposób nie jesteś w stanie czerpać korzyści z wydajności, jaką zapewnia ta struktura.

Zachęcam do trzymania się tego. Wróć do początku, korzystając z samouczków wideo. Znajdź i czytaj kod innych ludzi, dopóki go nie zrozumiesz. Twórz projekty od podstaw - po prostu zacznij i dodawaj funkcje. Śledź fora, próbując samodzielnie odpowiedzieć na pytania przed przeczytaniem odpowiedzi.

Programuję zawodowo od prawie 20 lat, na różnych platformach i nadal potrzebowałem trochę czasu, zanim zaznajomiłem się z CI. Ale teraz, kiedy jestem, nie wróciłbym do czystego PHP (dla moich własnych projektów), chyba że miałbym witrynę o wystarczającej skali, która ujawniałaby mierzalne problemy z wydajnością (pomyśl o Twitterze).

coolgeek
źródło
Nadal jestem na granicy, czy ja też lubię frameworki. Zdecydowanie widzę sens PO, ale widzę również twój ... nauka frameworka jest jak nauka zupełnie nowego języka. Musisz zapoznać się ze sposobem robienia rzeczy w ramach. Inną rzeczą, z którą się zmagam, jest to, że moja filozofia dotycząca tego, jak należy to robić, różni się od filozofii ram. Wciąż próbuję znaleźć taki, który mi odpowiada. (Nie mogę się doczekać .NET MVC3)
mpen
Na razie nie znam innych frameworków, więc nie mogę mówić z żadną ogólnością. Ale używanie frameworka nie jest propozycją wszystko albo nic. Na przykład uważam, że biblioteki buforujące CI (strona, baza danych) są niewystarczające i niełatwo skalowalne. Używam więc biblioteki cache innej firmy (Phila Sturgeon) i jestem z niej całkiem zadowolony.
coolgeek
Kolejną istotną zaletą trzymania się tego jest to, że stosunkowo łatwo jest później nauczyć się innych frameworków. Dlatego często widzisz oferty pracy określające konkretny framework (powiedzmy, CI), ale stwierdzające, że doświadczenie z podobnymi frameworkami (powiedzmy Zend lub Symfony) będzie brane pod uwagę.
coolgeek
2

Zend Framework jest do tego naprawdę świetny. Możesz używać tyle, ile chcesz. Wszystko jest zakodowane w php i open source, więc możesz po prostu zhakować i uczynić go swoim. Poszczególne komponenty nie są od siebie zależne tak bardzo, jak w innych frameworkach.

Możesz bez problemu zbudować sobie prosty framework używając niektórych komponentów Zend.

Sprawdź to!

Iznogood
źródło
3
Próbuje odejść od ram.
WarmWaffles,
1
@WarmWaffles. Dlatego właśnie mówiłem o używaniu części ZF. Z pewnością nie spodziewasz się, że facet wymyśli koło na wszystko.
Iznogood
2
Iznogood ma bardzo dobry punkt widzenia. ZF to więcej niż tylko framework. Zauważyłem, że pakiety są niezwykle przydatne do wykonywania wielu typowych zadań i nie ma w tym nic, co zmusza cię do korzystania z ich wzorców MVC lub metod dostępu do bazy danych, czy naprawdę czegokolwiek. Oczywiście możesz też wybrać moduły Gruszka.
Bob Baddeley,
2
Jest to biblioteka, która ma również strukturę. Jednak szuka czegoś łatwego w użyciu, a ostatnio, gdy sprawdzałem, przestrzeń nazw Zend jest zagracona i trudna do wpisania. @Bob_Baddeley PEAR to dobra sugestia
WarmWaffles
@WarmWaffles Dobrze dla każdego, jak sądzę. Może mógłbyś teraz sprawdzić ponownie Zend, który ma teraz 1.10.x i całkiem inaczej niż powiedz 1.8.
Iznogood
2

Wiem dokładnie, co czujesz. Zacząłem 4 ~ 5 lat temu w PHP (pochodzę z Delphi, lol) i zacząłem w czystym php. To, co miałem z powrotem, to "Panel CMS podobny", który po prostu czyta wszystkie pola tabel i tworzy formularz. Po jakimś czasie doszedłem w jakiś sposób do znajomości frameworka PHP, najpierw wypróbowałem CakePHP i nie podobało mi się, po czym dostałem się do Yii, która moim zdaniem jest dość intuicyjna i łatwa w użyciu (z generatorem Gii to całkiem nieźle). Wypróbowałem Symfony, ZF2, Laravel, Yii2-Beta i kilka frameworków dla RAD, ale nadal nie czułem się wystarczająco szybko, jak przed frameworkami.

Zdarzyło się, że stworzyłem własny framework (oczywiście nie było tak, że pewnego dnia obudziłem się i powiedziałem: „Zamierzam stworzyć nowy framework”, stało się z czasem). Wiem, że to zła, zła, zła praktyka i ruch „na nowo wymyślony na kółkach”, ALE teraz rozwijam swoje projekty znacznie szybciej (więcej niż tylko PHP).

Ponieważ jego kod to totalna MESS, zacząłem około miesiąc temu przeformułować mój framework, teraz używa kompozytora, przestrzega wspólnych reguł, które istnieją między frameworkami php, to MVC.

Dlaczego zmieniam formułę? Bo jeśli ktoś będzie musiał naprawić mój projekt, to nie będzie to inny świat.

Więc rozumiem cię.

Moja rada jest taka, przygotuj swoje narzędzia (nazwij to frameworkiem, wstępnie ustawioną aplikacją lub jakkolwiek ludzie to nazywają) i używaj ich tak, jak czujesz się lepiej, ale nadal przestrzegaj pewnych wspólnych zasad można wymienić w przypadku zerwania.

Ricardo Fiorani
źródło
1

Dla podstawowego bezpieczeństwa używam niestandardowej metody filtrowania, która obejmuje moje superglobale . Jego składnia wymaga trochę przyzwyczajenia, ale jest prostsza niż interfejs API filter_var () PHP i nie pozwala na poślizgnięcie się od sanityzacji:

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

Pozwalał również na wbudowane znaki ucieczki $ _REQUEST-> sql (). Ale do pracy z bazą danych nadal używaj sparametryzowanego SQL lub wybranego DAL / ORM.

mario
źródło
To zdecydowanie sprytne rozwiązanie, ale nie jestem pewien, dlaczego uważasz, że interfejs API filtru jest uciążliwy. Jeśli już, myślę, że filter_input_array () jest doskonała. (Przede wszystkim dlatego, że ułatwia to zdefiniowanie wszystkich danych wejściowych dla danego typu żądania w jednym miejscu w rozsądnie deklaratywny sposób. Nigdy nie lekceważ korzyści z tego rodzaju rzeczy.)
ssokolow
@ssokolow: Rzeczywiście, filter_input_array () jest sprytny do zrobienia tego za jednym zamachem. Jednak funkcje filter_ * są już zbyt elastyczne i zbyt wiele parametrów do niej nie pasuje. Dlatego uważam, że ludzie tego unikają (mimo że jest to technicznie dobre rozwiązanie).
mario,
Być może. Myślę, że część problemu polega na tym, że oprócz tego, że niedawno przybył do świata, w którym wiele osób wciąż ma książki o PHP4 na półkach, jest on niedostatecznie reklamowany, oficjalne dokumenty nie są wystarczająco jasne, a dokumentacja W3Schools które zwykle udostępniają najlepsze wyniki Google, nie są wystarczająco wyczerpujące.
ssokolow
1

Zrobiłem jednodniowe badanie ToroPHP i okazało się, że jest całkiem przyjemny. Jest to minimalistyczny framework przeznaczony dla aplikacji RESTful. Dzięki temu możliwe jest zachowanie modułowości kodu po stronie serwera, bez konieczności zajmowania się nadmiarem jakiegokolwiek frameworka.

Kinjal Dixit
źródło
1

Nie wiem, co cię trapi, ale codeigniter to świetny framework, ma ładną dokumentację, a ponieważ wiele osób używa codeignitera, całą pomoc znajdziesz w jego dokumentacji, na forum lub na stackoverflow. Pracowałem na wielu frameworkach ( Codeigniter, CakePHP, Zend, Spring 3.0, Ruby on Rails), ale muszę powiedzieć, że codeigniter ma najlepszą dokumentację, w Codeigiterze jest wiele rzeczy, które są obsługiwane automatycznie i nie musisz martwić się o bezpieczeństwo. Praca nad rdzeniem PHP jest jak wymyślanie na nowo koła. Cóż, najważniejszą rzeczą jest to, że przejście od rdzenia do frameworka będzie wymagało dużo wysiłku, gdy już się do niego przyzwyczaisz, zaczniesz go kochać.Również Ruby on rails to również świetny framework, gdy poznasz jego tajniki, które możesz mają podwójną prędkość.

Sachin Prasad
źródło
2
Minęło nieco ponad dwa lata, odkąd to opublikowałem i przez jakiś czas pracowałem z czystym PHP, ale od tego czasu wróciłem do PHP - masz rację, jest niesamowicie łatwy w użyciu. Moja obecna preferowana konfiguracja to CI, phpActiveRecord dla baz danych i Twig do tworzenia szablonów.
Alex C,
Tak, phpActiveRecord wygląda ładnie. Czy kiedykolwiek próbowałeś Laravel? ( laravel.com ) Myślę, że przekonasz się, że ma on domyślnie wbudowane najlepsze funkcje CI, phpActiveRecord i Twig. Sam byłem programistą CakePHP, ale ostatnio uważnie przyglądam się Laravel.
Simon East,