Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Spawn Framework
Forum PHP.pl > Inne > Oceny
Stron: 1, 2
Spawnm
Witam,

proszę o opinie na temat:

1. strony www

2. frameworka

Co byście zmienili, czego wam brakuje.

Adres: http://spawnframework.com/
cojack
Mnie się podoba prostota frameworka ;] nie testowałem bo nie mam czasu, ale z tego co widać w manualku, to prostota rządzi, ja też coś tam swojego skrobie, tylko mój jest troszkę bardziej przykokszony, ale z ORM'a to ja tam nic nie widziałem, Spawn?

@EDIT a nie jednak jest, tylko o weryfikacji danych nie ma ani słowa na podstawie modeli, a mogłeś to zrobić ;]
erix
    • jak dla mnie trochę za jaskrawe kolory
    • czcionki szeryfowe raczej nie na ekran winksmiley.jpg
  1. widząc prefiks sf myślę o Symfony tongue.gif


@up: jest, tylko nie wiem, czemu w przykładach nie chwali się nim od razu (a powinien).
Spawnm
http://spawnframework.com/doc/21/sf_orm

dodam że w orm działają metody z
http://spawnframework.com/doc/20/sf_db
oraz w obydwu przypadkach metody z pdo .
cojack
Ale teraz to Ci się oberwie:

1) Po co komu te śmieci w pliku do ściągnięci? Nie wyczyściłeś kopi zapasowych plików, zacznij używać svn'a i nie będziesz miał z tym żadnego problemu.
2) Co to jest za licencja?
3) Autoload, po co? Na co? :/
4) View, dziwne to factory u Ciebie, pierwszy raz widzę takie coś. Bardziej niż na faktory to mi wygląda na wzorzec złożony.

@EDIT
to nie mogłeś w kodzie napisać co to za licencja, jak to się czyta wygląda jak GPL, a tu widzisz BSD ;]
Spawnm
licencja:
http://www.opensource.org/licenses/bsd-license.php
SHiP
Hahahaha udostępniłeś ludziom hasła do swojej bazy...

Człowieku zrób porządek w paczce biggrin.gif

EDIT: W wolnej chwili spojrzę dokładniej na całość. Ogólnie mi się nie podoba "bałagan", np w controlerze masz metodę redirect albo error404. Ja bym redirect wrzucił do routera a 404 wyrzucił w ogóle...
Spawnm
posprzątane , zupełnie o tym zapomniałem że te pliczki się robią ;p
Crozin
Dobra, zaczniemy od błędów/złych rozwiązań:
  1. Brak możliwości zdefiniowania środowisk - albo przynajmniej dwóch podstawowych: production i development
  2. index.php:
    • Już nagłówek Content-Type? Czyli co... pliku XML już nie będę mógł [b]normalnie[b] (tak wiem... nagłówki można nadpisywać) wyświetlić
    • Nie wiem czemu ludzie jak definiują sobie ścieżkę do katalogu to dodają jakiegoś slasha na końcu smile.gif
    • Korzystając z set_include_path() powinieneś podać jeszcze jej starą zawartość: get_include_path()
  3. PHP 5.3 już jest od jakiegoś czasu - mogłeś skorzystać z przestrzeni nazw - szczególnie, że sf jest już "zarezerwowane"
  4. Mieszanie angielskiego i polskiego (sf_request::_filtr())
  5. Utrudnianie rozszerzania FW stosując metody prywatne, tam gdzie powinny być chronione (np. sf_request::_filtr())
  6. Czemu takie katalogi jak config czy logs są wrzucone wewnątrz katalogu library?
  7. Brak jakiejś konsekwencji w komentarzach... raz phpDoc, raz "coś", raz ich kompletny brak
  8. sf_router::location() - wtf? Od kiedy to router ma takie rzeczy wykonywać
  9. Metody potworki... spawn::create() - kompletnie nietrafiona nazwa, wykonuje za wiele czynności: konfiguruje środowisko, określa i wywołuje kontroler, zajmuje się obsługą błędów
  10. Czy mi sie wydaje czy router polegnie, gdy będę chciał: /my-awesome-product-123.html przekierować na kontroler: product, akcje: index z parametrem id = 123?
  11. Po co w __call() sprawdzasz czy metoda istnieje? Przecież oczywiste jest, że nie, skoro __call zostało wywołane.
  12. Jaki jest sens parametrów (2-gi i 3-ci) w sf_db::orWhere? orWhere('...', 'AND', 'AND')? biggrin.gif
  13. Jeżeli jakiś model ma w swojej nazwie "orm" to już nie jest poprawnym modelem
  14. sf_jquery - ehkem... wtf?
  15. sf_cookie/sf_math - masz tam błędy składni
  16. Co w sf_math robią metody typu rbg2hex? Co to ma wspólnego z matematyką (na co wskazuje nazwa)? sf_math::dec2hex... http://php.net/manual/en/function.dechex.php
  17. W ogóle to widzę tu więcej funkcji, które dublują już istniejące
  18. sf_mail... po co to w ogóle jest "klasą"? Poza tym tylko utrudnia życie - poproszę o maila z załącznikiem do 100 osób
  19. sf_html::rss() - a jak będę chciał dodać atrybut title? To samo z ::css() - a media mogę podać?
  20. sf_view::factory() - czym to się różni od bezpośredniego wywołania konstruktora?



Takich kilka luźnych uwag/spostrzeżeń na pierwszy rzut oka patrząc po kilku plikach. Ogólnie - słabo... bardzo słabo.

PS. Popracuj nad angielskim. winksmiley.jpg
PPS.
Cytat
(...)and use the MVC architecture(...)
Nie, on nie jest oparty o MVC...
Spawnm
łojej nie sądziłem że tego aż tyle będzie ...

Cytat
uż nagłówek Content-Type? Czyli co... pliku XML już nie będę mógł [b]normalnie[b] (tak wiem... nagłówki można nadpisywać) wyświetlić

inne frameworki też tak robią , np. kohana;)

Cytat
Mieszanie angielskiego i polskiego (sf_request::_filtr())


jedno się trafiła, jeszcze gdzieś znajdziesz to pisz , wydawało mi się że tylko angielskie nazwy są...

Cytat
Czemu takie katalogi jak config czy logs są wrzucone wewnątrz katalogu library?


uznałem że rupiecie danego frameworka powinny być w jego folderze aby się nie gryzły z innymi libami.

Cytat
sf_router::location() - wtf? Od kiedy to router ma takie rzeczy wykonywać


jeśli chcę aby po wpisaniu nazwa.pl/forum
przeniosło mnie np. na fora.pl to po co mam do tego pisać specjalnie akcję skoro mogę ustawić przekierowanie w routerze


Cytat
W ogóle to widzę tu więcej funkcji, które dublują już istniejące


- np?

Cytat
aki jest sens parametrów (2-gi i 3-ci) w sf_db::orWhere? orWhere('...', 'AND', 'AND')?

ja widzę orWhere($where, $valWhere='OR' ,$sep='OR')

Cytat
sf_cookie/sf_math - masz tam błędy składni

k... poprawiałem to... już działa...
cepa
Cytat(Spawnm @ 8.07.2010, 19:32:25 ) *
k... poprawiałem to... już działa...

od tego testy sa wlasnie ;p
Crozin
Cytat
od tego testy sa wlasnie ;p
Raczej IDE, które podkreśli na czerwono byki w składni, czy po prostu odpalenie pliku winksmiley.jpg
Cytat
uznałem że rupiecie danego frameworka powinny być w jego folderze aby się nie gryzły z innymi libami.
Ale to nie są rupiecie FW, tylko normalne dane, które nie powinny być w katalogu na kod źródłowy bibliotek itp. Poza tym FW to taki rupieć nadrzędny względem innych i ma prawo sobie śmiecić
Cytat
- np?
sf_math::dec2hex(), sf_math::hex2dec (dechex/hexdec), sf_date::add (datetime::add), sf_date::w3cDate (to nie jest przypadkiem date() z formatem "c" czy http://pl.php.net/manual/en/class.datetime...e.constants.w3c ), sf_date::isDate (checkdate, datetime), sf_csv (nie chce mi się sprawdzać, ale czy to robić coś poza tym co robi fgetcvs?),
Cytat
ja widzę orWhere($where, $valWhere='OR' ,$sep='OR')
Dlatego się zastanawiam po co są te parametry skoro ta funkcja ma robić za "or" - sama jej nazwa na to wskazuje
skowron-line
  1. class sf_url{
  2.  
  3. /**
  4. *return controller and action
  5. *
  6. *@param - string - core - if true - return base spawn config
  7. *@return - string - /{controller}/{action}
  8. */
  9. public static function base($core=false){
  10. if($core==true){
  11. $par=sf_config::get('spawn');
  12. print_r($par); //<------------------------------------------------- WTF questionmark.gif
  13. return '/'.$par['controller'].'/'.$par['action'];
  14. }
  15. return '/'.sf_request::instance()->param(0).'/'.sf_request::instance()->param(1);
  16. }


Napisz co cię skłoniło do napisania własnego FW, czego brakowało lub czego było w istniejących rozwiązaniach.
Spawnm
Cytat
Raczej IDE, które podkreśli na czerwono byki w składni, czy po prostu odpalenie pliku winksmiley.jpg

Jak pisałem poprawiałem to i testowałem , nie wiem czemu w paczce były stare wersje ...

co do czemu rupiecie takie jak config trzymam w sf - nie jestem sam i akurat tego nie planuję zmieniać w strukturze swoje frameworka smile.gif

@skowron-line - wywalone już.

Cytat
Napisz co cię skłoniło do napisania własnego FW, czego brakowało lub czego było w istniejących rozwiązaniach.

Brakowało mi prostoty struktury fw , brakowało mi fw do małych projektów, fw który by nie zajmował kilka MB. Widząc w jakim kierunku rozwija się np. kohana w której pracowałem uznałem że ja w tym czymś pracować dalej nie będe.
cepa
Cytat(Crozin @ 8.07.2010, 20:32:55 ) *
Raczej IDE, które podkreśli na czerwono byki w składni, czy po prostu odpalenie pliku winksmiley.jpg

jak masz 20 tys plikow w projekcie to bedziesz kazdy z osobna otwieral i uruchamial smile.gif?
Spawnm
Cytat(cepa @ 8.07.2010, 21:08:27 ) *
jak masz 20 tys plikow w projekcie to bedziesz kazdy z osobna otwieral i uruchamial smile.gif?

A ty piszesz najpierw 20tyś plików i dopiero później zaczynasz wyszukiwać gdzie zgubiłeś ';' ?
Czy robisz to etapami ?
skowron-line
  1. class sf_date{
  2.  
  3. /**
  4. *add X day to date
  5. *
  6. *@param - string - date
  7. *@param - string - day
  8. *@return - string - new date
  9. */
  10. public static function addDate($date,$day){
  11. $sum = strtotime(date('Y-m-d', strtotime($date)) . ' +'.$day.' days');
  12. $dateTo=date('Y-m-d',$sum);
  13. return $dateTo;
  14. }


Lat, miesięcy już nie dodajesz questionmark.gif i wydaje mi się że lepiej by było jak by zwracał w sekundach, no ale to może tylko moje odczucie. Ogólnie niezły śmietnik w kodzie, mam dziwne wrażenie że pisany na kolanie i byle szybciej.
Spawnm
Cytat
Ogólnie niezły śmietnik w kodzie

Domyślam się że wszystko cudowne tam nie jest ale
to co wyżej uważasz za śmietnik? Przesadzasz winksmiley.jpg

Cytat
mam dziwne wrażenie że pisany na kolanie i byle szybciej.

Może nie byle szybciej ale na kolanie chwilami tak winksmiley.jpg
cepa
Cytat(Spawnm @ 8.07.2010, 21:17:03 ) *
A ty piszesz najpierw 20tyś plików i dopiero później zaczynasz wyszukiwać gdzie zgubiłeś ';' ?
Czy robisz to etapami ?

eh nie kminisz..

powiedzmy ze twoj framework sie rozbudowal, i masz spora chierarchie obiektow (patrz Zend, Symnfony, etc), no i jakas twoja klasa jest uzywana np: w 20 miejscach w kodzie...
zmieniles cos w tej klasie i co teraz? bedziesz sprawdzal recznie czy caly pozostaly kod dziala? na tym wlasnie polega testowanie, zauwaz ze gigantyczne frameworki rownierz maja gigantyczna mase testow a zaloze sie ze ich stabilnosc jest na tyle wysoka ze na oko mozna by powiedziec ze testy sa wcale nie potrzebne

pozatym z komercyjnego punktu widzenia, nie moge wykorzystac twojego kodu na powaznie, bo nie ma on zadnej gwarancji dzialania, a testy sa taka wlasnie gwarancja tongue.gif
skowron-line
Cytat(Spawnm @ 8.07.2010, 20:40:03 ) *
to co wyżej uważasz za śmietnik? Przesadzasz winksmiley.jpg

Broń boże to co podałem to nie przykład śmietnika, takie małe spostrzeżenie, uwaga na to jak można by tą metodę dopracować. Mało czytelny jest kod, brakuje spacji enterów, bardziej rozbudowanych komentarzy do metod
Spawnm
Brakuje ci spacji i enterów ? A ja myślałem że za dużo zawsze daję biggrin.gif
Crozin
Cytat
Brakowało mi prostoty struktury fw
Twój FW nie jest prosty... jest prymitywny. Niestety ale przeglądając jego źródła natrafiłem na dziesiątki miejsc, gdzie będzie on ograniczać i utrudniać życie, a nie pomagać. Dodatkowo jest zaprojektowany na przekór wszystkim ideą OOP (patrz dziesiątki statycznych metod, które być nie powinny) co zemści się w momencie, gdy będziesz chciał rozszerzyć jakiś "moduł".
Cytat
brakowało mi fw do małych projektów
A tak konkretnie to w czym przeszkadza użycie jakiegoś Symfony czy Zenda w małych projektach. Co jest konkretnie złego w tym, że sam FW będzie 5 razy bardziej obszerny niż aplikacja?
Cytat
fw który by nie zajmował kilka MB
Ponownie - podaj jakiś konkretny argument przeciwko 10 megowemu FW. Jego API nauczysz się w 1-3 dni. Momentami będziesz musiał podejrzeć bezpośrednio źródła, ale zajmie to nieporównywanie mniej czasu niż pisanie czegoś własnego (szczególnie, jeżeli miałoby być na poziomie).
Cytat
Widząc w jakim kierunku rozwija się np. kohana w której pracowałem uznałem że ja w tym czymś pracować dalej nie będe.
No to nie pracuj. Mi również nie podoba się ten FW (jednak jestem zmuszony do pracy przy jego wykorzystaniu w jednym projekcie) - ale całe szczęście PHP oferuje kilka innych wartych uwagi FW.

Cytat
jak masz 20 tys plikow w projekcie to bedziesz kazdy z osobna otwieral i uruchamial
Eee... takie Eclipse np. bezpośrednio w drzewie projektu pokazuje, w których plikach są błędy (NB, ZS pewnie też). winksmiley.jpg

Cytat
to co wyżej uważasz za śmietnik? Przesadzasz
Nie przesadza. winksmiley.jpg

Cytat
Może nie byle szybciej ale na kolanie chwilami tak
To zły projekt sobie wziąłeś na "wzór".
-=Peter=-
Cytat
pozatym z komercyjnego punktu widzenia, nie moge wykorzystac twojego kodu na powaznie, bo nie ma on zadnej gwarancji dzialania, a dobre testy sa taka wlasnie gwarancja

Zapomniałeś słowa które pogrubiłem. To że się napisze kilka testów, które powiedzmy pokrywają 40% kodu, to nie znaczy że są jakąkolwiek gwarancją winksmiley.jpg Ale ogólnie z tym stwierdzeniem się mogę zgodzić.

Jeśli chodzi o sam framework, to nie będę mocno krytykował, jednak stwierdzę że pośpieszyłeś się z jego publikacją.

* Już kilka osób zwróciło Ci uwagę np. na metodę sf_view::factory(). To nie jest implementacja wzorca factory, abstract factory, ani factory method, więc skąd taka nazwa tej metody? po co ona jest? snitch.gif

* Masz za duże zamiłowanie do metod statycznych, zdecydowanie za bardzo klasy pisane przez Ciebie przypominają zlepek funkcji. Równie dobrze ponad połowa frameworku mogła by być napisana samymi funkcjami w poszczególnych przestrzeniach nazw (czyli przykładowo cache\get). Pamiętaj że istota oop to nie procedury, a dane i operacje na nich.

* Zdecydowanie zbyt dużo singletonów, najlepiej jakby w ogóle tego tworu nie było.

* Styl kodowania (nie mówię tutaj o formatowaniu, ale o ogólnym sposobie pisania klas, metod itp.) pozostawia wiele do życzenia.
Spawnm
1/3 to static z tego co widzę, ale macie rację bo i ja się zastanawiałem czy by z niektórych metod nie wywalić static.

//Styl kodowania (nie mówię tutaj o formatowaniu, ale o ogólnym sposobie pisania klas, metod itp.) pozostawia wiele do życzenia.
chodzi ci o nazewnictwo czy spacje/entery jak skowronowi ?

Cytat
* Już kilka osób zwróciło Ci uwagę np. na metodę sf_view::factory(). To nie jest implementacja wzorca factory, abstract factory, ani factory method, więc skąd taka nazwa tej metody? po co ona jest? snitch.gif


No w sumie mogłem tam dać load czy coś w tym stylu.
A wykorzystuje to tak:
  1. $view=sf_view('home');
  2. $view->title='aaa';
  3. $view->main=sf_view::factory('news')->helper('form')->render();
  4. $view->render();

Może i głupie może i nie tongue.gif
Quantum
Kod rzeczywiście mało czytelny, przynajmniej dla mnie. To formatowanie PEAR, trafiłem ? biggrin.gif Gdyby przepuścić pliki przez jakiś "upiększacz" można było by poczytać, teraz dość ciężko analizować kod. A teraz tak pobieżnie, widać, że dużo pracy w to włożyłeś. Sam może z rok temu dziergałem kod własnego - niestety do niczego to nie doprowadziło. Straciłem zapał i stwierdziłem, że lepiej skorzystać z innego framework-a, którego nie tworzy jedna osoba. Po jakimś czasie napewno wyszło by wiele tzw. "wąskich gardeł", które uniemożliwiały lub utrudniałyby dalszy rozwój aplikacji. Wzorowałeś się na Kohanie ? Co do struktury katalogów, rzeczywiście konfiguracja, logi, cache etc., już należą do aplikacji. W katalogu bibliotek nic poza ich kodem, sterownikami nie powinno być. W ostateczności konfiguracja domyślna, lecz nadpisywalna przez tę w folderze aplikacji. Kod ocenię jak będę miał trochę więcej czasu winksmiley.jpg

BTW. http://beta.phpformatter.com.
-=Peter=-
Jeśli chodzi o styl kodowania to co mi się rzuciło w oczy:
- niespójne komentarze, raz przed metodą w stylu phpDoc, raz zwykłe jedno linijkowe
- niechlujstwo i niekonsekwencja - np. raz przed przecinkiem jest spacja, raz jej nie ma
- kod ciężko się czyta, próbujesz ratować jego czytelność miejscami gęsto osadzonymi jedno linijkowymi komentarzami, co jest właśnie oznaką tego że kod nie jest czytelny winksmiley.jpg Lepiej zamiast pisać takich komentarzy zmienić nieco kod.
- trochę powtórzeń kodu
- niektóre metody są za duże, powinny być rozbite na kilka mniejszych (metody za duże rozpoznasz po tych komentarzach które zajmują jedną liniję)

Aby nie być gołosłownym, przykład winksmiley.jpg

Oryginalny kod:
  1. class sf_orm {
  2. public function update($values=array(), $where=array() , $sep=' AND '){
  3. $where=(is_array($where))? $where : array($this->_tableKey=>$where);
  4. return $this->_db->update($this->_tableName , $values,$where , $sep );
  5. }
  6.  
  7. public function updateRequest(array $req, $where=array() , $sep=' AND '){
  8. //valid values
  9. if($this->_structure){
  10. foreach($req as $key => $val){
  11. if(!in_array($key,$this->_structure)){
  12. unset($req[$key]);
  13. }
  14. }
  15. }
  16. //create where
  17. $where=(is_array($where))? $where : array($this->_tableKey=>$where);
  18. //execute
  19. return $this->_db->update($this->_tableName,$req, $where, $sep);
  20. }
  21. }


Lekko zrefaktorowany:
  1. class sf_orm {
  2. public function update($values=array(), $where=array() , $sep=' AND '){
  3. $where = $this->createWhere($where);
  4. return $this->doUpdate($values, $where, $sep);
  5. }
  6.  
  7. private function createWhere($where){
  8. if(!is_array($where)){
  9. $where = array($this->_tableKey=>$where);
  10. }
  11.  
  12. return $where;
  13. }
  14.  
  15. private function doUpdate($values, $where, $sep){
  16. return $this->_db->update($this->_tableName, $values, $where, $sep);
  17. }
  18.  
  19. public function updateRequest(array $req, $where=array() , $sep=' AND '){
  20. $values = $this->deleteUnusedValues($req);
  21.  
  22. return $this->update($values, $where, $sep);
  23. }
  24.  
  25. private function deleteUnusedValues(array $values){
  26. if($this->_structure){
  27. $values = array_intersect_key($values, $this->_structure);
  28. }
  29.  
  30. return $values;
  31. }
  32. }
Zyx
Ja się przyczepię do wynajdowania koła na nowo. Nie chodzi mi o framework, jako taki, ale o zastosowane w nim rozwiązania. Co skłoniło Cię do wyprodukowania pliku sf_date.php, kiedy PHP już od co najmniej kilku lat ma wbudowane, prekompilowane i obiektowe rozszerzenie do zarządzania datami, które na pewno jest bardziej dokładne, niż Twoje?

http://docs.php.net/manual/pl/class.datetime.php

Patrzymy do sf_math, a tam:

Kod
public static function hex2dec($number){


http://docs.php.net/manual/pl/function.hexdec.php

Lub przekombinowane algorytmy. sf_math::hex2rgb() - jakieś skomplikowane operacje na tekście tam robisz, a taka konwersja to de facto zrzutowanie tekstu na liczbę całkowitą, przepuszczenie jej przez trzy maski bitowe i zrobienie przesunięć w prawo.
Spawnm
Hey,
takie klasy jak math czy date wpadły do frameworka bo swego czasu napisałem funkcje które tam obecnie się znalazły w formie metod i uznałem że skoro mi się pewnie kiedyś przydały to może i teraz komuś się przydadzą smile.gif

Co do config debug itp w sf, możecie je dać gdzie wam się podoba, tylko w index.php zmodyfikujcie define().

@Quantum -> ten programik narzuca stosowanie
  1. nazwa()
  2. {
  3. //coś
  4. }

I zbyt wiele w kodzie nie zmienia ... no wcięcia mi zmniejszył . Nie powiedział bym aby kod z rezultatu był czytelniejszy , przynajmniej nie dla mnie .

'Wzorowałeś się na Kohanie ?'
W pewnym stopniu tak, do zenda też mi się zaglądało a i po dokumentacjach innych frameworków przeleciałem palcem zobaczyć jak oni różne rzeczy rozwiązali .
cojack
Czepiacie się, wszystko idzie dopracować, jak jemu działa i mu odpowiada to jest jego projekt, można błędy powytykać ale po co mieszać od razu gościa z błotem? Nikt Wam nie każe używać jego projektu, mi by nawet na tym nie zależało by ktoś używał mojego jak zrobię ( a zrobię release ), a chętnie po wysłuchuje zrypek ;]

Wcale nie jest prymitywny, tylko prosty, czasami człowiek na prawdę nie wie gdzie jaką metodę wrzucić, nie każdy jest po studiach z inżynierią oprogramowania, gdzie takie rzeczy po prostu wałkują w Ciebie.
phpion
A mi się podoba! Prosty, mały i zapewne do takich celów został stworzony. Może nie jest idealny, ale jeśli spełnia swoją rolę to w czym rzecz? Do każdego frameworka (nawet tych klasy enterprise) można się doczepić.

Odnośnie pytania dlaczego nie używać np. ZF dla małych projektów: wydaje mi się, że narzędzia powinno dobierać się pod konkretne wymagania i potrzeby, a nie z pały łubu-dubu. ZF dla strony domowej z formularzem kontaktowym to moim zdaniem przerost formy nad treścią.

PS: skrót sf faktycznie jest mylący, również w pierwszej kolejności skojarzyłem go z symfony i myślałem, że to jakiś Twój fork tego frameworka winksmiley.jpg
wookieb
A ja bym prosił o jakieś dane dotyczące zużycia pamięci, czas wykonywania dla konkretnych przykładów stron (co tam jest itd)
Quantum
@up, popieram, uwzględnij też manipulacje danymi na jakimś większym zbiorze przez ORM smile.gif

w kodzie często używasz ternary operator ze zbędnymi nawiasami np:

  1. /**
  2. *get cookie param
  3. *
  4. *@param - string - param name
  5. *@param - if cookie with self param not exists return this param
  6. *@return - string
  7. */
  8. public static function get($name,$or=null){
  9. return (isset($_COOKIE[$name]))? $_COOKIE[$name] : $or;
  10. }


wystarczy

isset($_COOKIE[$name])? $_COOKIE[$name] : $or;

ale to drobnostka. Sprawdź sobie formatowanie Allman BSD, jest dość podobne do tego, które zastosowałeś. Przykłady:

  1.  
  2. $tablica = array(
  3. 'x' => 17,
  4. 'y' => 29
  5. );
  6.  
  7. $bool = false;
  8.  
  9. if (warunek)
  10. {
  11. //kod
  12. }
  13.  
  14. switch (warunek)
  15. {
  16. case 'a':
  17.  
  18. //kod
  19.  
  20. break;
  21. }
  22.  
  23. class example {
  24.  
  25. public function a()
  26. {
  27. //kod
  28. }
  29.  
  30. }
  31.  


A tak na boku, zamierzasz zaimplementować url forwarding ? brakowało tego w Kohanie.
Spawnm
Cytat
Może nie jest idealny, ale jeśli spełnia swoją rolę to w czym rzecz?

Jest to pierwsze publiczne wydanie , jak byście powiedzieli że jest idealny to byś się mocno zdziwił.

Co do skrótu sf - symfony :
w plikach symfony stosuje nazwy klas w formie sfNazwaKlasy , ja ze względu na loader klas stosuję sf_nazwa_klasy więc mylić się aż tak nie powinno.

@Wookieb - w wolnej chwili porobię i dam na forum,blogu bo i tak się do tego przymierzałem.

//-----

Cytat
A tak na boku, zamierzasz zaimplementować url forwarding ?

są chyba 2-3 metody do przekierowań , opisz czego dokładnie oczekujesz.

Co do ternarów i niby zbędnego nawiasu - pomaga mi , kod dla mnie staje się czytelniejszy.

Cytat
Sprawdź sobie formatowanie Allman BSD

Nawet nie wiesz jak mnie wkurza gdy widzę że ktoś pisze w ten sposób .

erix
Cytat
Co do skrótu sf - symfony :
w plikach symfony stosuje nazwy klas w formie sfNazwaKlasy , ja ze względu na loader klas stosuję sf_nazwa_klasy więc mylić się aż tak nie powinno.

Ale to nie zmienia faktu, że pierwsze skojarzenie = symfony. tongue.gif
SHiP
Znalazłem czas. Przysiadłem i oto kilka rzeczy które mi się nie podobają winksmiley.jpg.

1. Plik file.php metoda - mimeType() - kod, który tam masz jest żywcem z php.net winksmiley.jpg i nie chodzi o to, że branie stamtąd to zło. Po prostu wiele osób, które się tam wypowiada nie orientuje się w temacie. Analogicznie tutaj - do sprawdzanie typu pliku używać się powinno http://www.php.net/manual/en/book.fileinfo.php Określanie mime po rozszerzeniu to jak picie płynu od obcej osoby tylko dlatego, że jest napis woda na butelce...

2. form.php to dla mnie jakaś pomyłka. Może to kwestia przyzwyczajenia ale po prostu nie korzystam z takich generatorów htmla. Jeśli natomiast chcesz to zostawic to popracuj nad poprawnością np.
  1. public function checkbox($name,$value,$check=false,$css=''){
  2. $check=($check==false)? '' : ' checked ';
  3. return '<input type="checkbox" name="'.$name.'" value="'.$value.'" '.$css.' '.$check.' />';
  4. }

Powinno być raczeh checked="checked" a $css powinno się nazywać $others lub podobnie bo widzę, że można w tym parametrze wstawić nie tylko css. W końcu czasem potrzeba title, rel lub disabled. W input type="text" nie masz readonly itd. Do dopracowania jest ta klasa

3. image.php - jeżeli nie przefiltrujesz ręcznie nazwy pliku to klasa będzie dziurawa. Nie uzywaj getimagesize() tylko exif_imagetype()
4. jquery.php - ?
5. Brakuje mi klasy do tłumaczeń

Ogólnie widzę, że się nieźle napracowałeś. Sporo kodu jest w porządku choć osobiście nie będę korzystał z dwóch powodów:
1. męcząca dla mnie składnia(np to że muszę za każdym razem ręcznie tworzyć widok lub model)
2. Mam swój, lepszy haha biggrin.gif
Quantum
Cytat(Spawnm)
Cytat

Sprawdź sobie formatowanie Allman BSD

Nawet nie wiesz jak mnie wkurza gdy widzę że ktoś pisze w ten sposób .


wyluzuj.. to tylko sugestia winksmiley.jpg

Jeśli chodzi o url forwarding, to miałem na myśli przekierowanie na inny kontroler/akcje bez zmian w pasku adresowym. Na przykład:

wchodzisz do strefy płatnej: http://przyklad.pl/artykuly/166/tytul-arta

zamiast artykułu widzisz stronę z informacją o dokonaniu płatności, bez przekierowania na np. adres: http://przyklad.pl/abonament choć będzie to w rzeczywistości ten sam kontroler.
Spawnm
Zobacz czy sf_controller::getAction spełnia twoje oczekiwania

@SHiP -> masz lepszy? Pokaż. smile.gif

Cytat
1. męcząca dla mnie składnia(np to że muszę za każdym razem ręcznie tworzyć widok lub model)

do widoku masz mini ułatwienie w formie sf_template , opisz dokładniej w czym problem.
Quantum
Cytat
Zobacz czy sf_controller::getAction spełnia twoje oczekiwania


HMVC.

  1. public function indexAction(){
  2. $view=new sf_view('spawn');
  3.  
  4. // forwarding
  5. $controller = new sf_controller;
  6. echo $controller->getAction('spawn', 'info');
  7.  
  8. $view->render(false);
  9. }
  10.  
  11. public function infoAction(){
  12. return 'info';
  13. }


po zmianie na echo w infoAction (zachowanie $view->render(true)) nie ma sensu już wywoływać echo $controller->getAction, trzeba to poprawić, albo na ob_* - nie zbyt elegancko, albo w klasie widoku udostępnić metodzie getAction manipulację zwracaniem/wyświetlaniem wyniku.

  1. /**
  2. *use sf_html::pre to write $val
  3. *
  4. *@param - array - param to write
  5. */
  6. public function pre($val){
  7. sf_html::pre($val);
  8. }


czemu ma służyć to opakowywanie metod (sf_controller::pre()) ?

a tak ogólnie, nawet nieźle Ci to wyszło smile.gif
Spawnm
Cytat
czemu ma służyć to opakowywanie metod ?

mojemu lenistwu przy testowaniu wyników w trakcie pisania sf , wygodniej mi było w kontrolerze pisać $this->pre($result);

Cytat
a tak ogólnie, nawet nieźle Ci to wyszło smile.gif

A dziękuje smile.gif


udostępniłem 1.0.6 bez błędów (przynajmniej bez większości błędów tongue.gif )
Crozin
Cytat
mojemu lenistwu przy testowaniu wyników w trakcie pisania sf , wygodniej mi było w kontrolerze pisać $this->pre($result);
To weź sobie w swoim edytorze ustaw szablon, by po wpisaniu nie wiem... "pre" wywalało "sf_html::pre" czy jak to tam masz, a nie śmieć w "finalnym wydaniu"

PS. Jak chcesz udostępniać to jako OS, to wypadałoby udostępnić jakieś narzędzia do zgłaszania błędów, może publiczne repozytorium (polecam GITa) - nieco się pospieszyłeś z publikacją.
marcio
Cytat
PS. Jak chcesz udostępniać to jako OS, to wypadałoby udostępnić jakieś narzędzia do zgłaszania błędów, może publiczne repozytorium (polecam GITa) - nieco się pospieszyłeś z publikacją.

Boze @Crozin ale jestes fiskalny widze e lubisz potruc...;]
Mysle ze i tak nie zalezy mu na tym zeby ktos go uzywal raczej chcial pokazac to co robil w "wolnym" czasie by uslyszec opinie innych snitch.gif
Spawnm
Jak ktoś będzie chciał zgłosić błąd to ma formularz kontaktowy + forum
cojack
Dalej nie wyczyściłeś paczki do ściągnięcia z kopi zapasowych plików.
SHiP
Napisz sobie skrypt do czyszczenia katalogów. Ja w swoim fw napisałem sobie coś takiego i nie mam problemów ze złożeniem paczki.
Kod
#!/bin/sh
echo "=== Czyszczenie katalogów ==="
echo "Usuwanie katalogów .svn z `pwd`"
rm -rvf `find . -type d -name .svn`

echo "Usuwanie plikow .directory z `pwd`"
rm -rvf `find . -type f -name .directory`

echo "=== Czyszczenie pamięci cache ==="

rm -v `find ./application/cache/config/site/ -type f`
rm -v `find ./application/cache/view/xhtml/ -type f`
rm -v `find ./application/cache/handycode/ -type f`
rm -v `find ./log/errors/ -type f`
rm -v `find ./log/userActions/ -type f`
cojack
Wystarczy że by używał SVN i export.
Spawnm
dobra pierwsze mini testy wydajnościowe:

kohana 2 nie posiada pdo , ko3 niby posiada ale ma inne metody niż klasa dla mysql a nie wiem jakie i jakoś nie chce mi się szukać , ktoś chce to nie powie.

test polegał na :
1. odpalenie klasy pager ,
2. wykorzystanie ORM do sprawdzenia COUNT(*) , a tym samym pierwsze odpalenie klasy DB oraz połączenie z bazą
3. za pomocą ORM pobranie pierwszych 15 rekordów.
i z tego jest pierwszy wynik
2 wynik jest z tego samego testu jednak w chwili gdy klasa db oraz baza zostały już aktywowane.


sf_:
pager + orm::count + findall limit 15 | pdo
Array ( [memory] => 40624 [time] => 0.00448 )
Array ( [memory] => 2308 [time] => 0.00059 )

ko3:
pager + orm::count_all + find_all limit 15 | mysql
Array ( [memory] => 1338840 [time] => 0.01300 )
Array ( [memory] => 3248 [time] => 0.00041 )

ko2:
pager + orm::count_all + find_all limit 15 | mysql
Array ( [memory] => 676600 [time] => 0.00601 )
Array ( [memory] => 2272 [time] => 0.00067 )

wookieb
Chodzi mi o zużycie pamięci dla całej przykładowej strony (menu, paginacja i wiele innych atrakcji) np panelu administracyjnego, strona z artykułem, strona logowania itp itd.
cojack
Bez przesady, to jest za dużo roboty wookieb.
Spawnm
A mogę zobaczyć takie przykłady innych frameworków, są gdzieś w sieci ?
Dzięki temu wystarczyło by że zrobił bym ten panelik w swoim fw i porównał wyniki smile.gif
cojack
Spawn powiedz mi czemu użyłeś buffera zamiast evala w templatkach?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.