Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Framework] TurFramework Preview 2
Forum PHP.pl > Inne > Oceny
Turgon
Witam!
Kiedyś postanowiłem, że napiszę sobie CMS'a. Po kilku dniach wziąłem się do pracy. Projekt porzuciłem po trzech tygodniach. Ostatnio go odgrzebałem. Pomyślałem i zrobiłem takie cuś. Podchodzi bardziej to do FrameWorka. Manuala nie udało mi się opracować, ale proszę o ocenienie kodu, wskazanie kierunku itp.
I teraz ostatecznie Frameworkiem się stało smile.gif

Paczuszka z SQLem:
Paczka Zip
Paczka Tar.gz

Zdravim
Łukasz
dr_bonzo
1."* Not allowed to use. This is only preview!"
to moge go uruchomic czy nie?

2.
  1. <?php
  2. $config['database']['host'] = '127.0.0.1';
  3. ?>

a da sie nr. portu skonfigurowac?

3. brak formatowania kodu:
  1. <?php
  2. class indexVendor extends TurVendor{
  3.  
  4. public function index(){
  5. $this->view->loadView('index');
  6. return $this->view->render();
  7. }
  8. public function another(){
  9. }
  10. }
  11. ?>


4. nie udalo mi sie go uruchomic na lighttpd (mod_rewrite)

5.
  1. <?php
  2. $var = preg_replace('/<script type="text/javascript">(.*)</script>/i','',$var);
  3. ?>

a co gdy podam:
  1. <script>...</script>
  2. <script type="..." >...</script>
  3. itd
?

6. co robi "class TurVendor" to juz zupelnie nie wiem
bloki, zmienne, uprawnienia -- wszystko w jendej klasie
Turgon
1. Możesz, ale tylko do testów. Miałem na myśli użycie w projektach itp. ;]
2. Dodajesz po hoście porcik smile.gif
3. Kate nie oferuje takiej opcji, a ja nie jestem przyzwyczajony wciskać co chwilę "Tab".
4. Działa bez mod_rewrite. Tam są tylko dwie testowe reguły, które uruchamiałem na zdalnym serwerze.
5. Powinno zablokować tylko właściwe ;] Czyli JavaScriptowe, choć do końca nie testowałem. Słabo go znam.
6. To podstawa dla każdego Vendora, ponieważ każdy Vendor nie będzię dziedziczył po 20 klasach winksmiley.jpg, bo to trochę bez sensu. I te bloki, to nie działają bo wyrzuciłem klasy typu TurBlock. Odchudziłem aplikację, bo interesuje mnie głównie ocena jądra.
Cysiaczek
Jeśli chodzi o klasę TurKernel, to mi się nie podoba. Zawiera metody, które coś wypisują na ekran. Rozumiem, że to są testy, ale ładniej by to wyglądało, gdyby np. metody TurKernel::compileInfo(), albo TurKernel::listModules() wyszukiwały informacje, a potem je zwracały. Z samej tej klasy IMHO da się wydzielić co najmniej 5 różnych klas, bo teraz klasa ma zbyt dużą odpowiedzialność. W obecnym stanie rozwoju nie stanowi to problemu, ale jeśli zechcesz rozbudować, to napotkasz na mur. Będziesz musiał przekazywać coraz więcej parametrów do metod, a co za tym idzie, coraz więcej instrukcji warunkowych. Jeśli to jednak skończony projekt, to nie ma problemów. : )

Pozdrawiam.
Turgon
Wiem, wiem winksmiley.jpg Cysiaczku, dlatego obecnie przebudowywuję ją całą. Te metody zostaną w takim stanie, gdyż takie je lubię smile.gif Zmienię też delikatnie strukturę jądra smile.gif tzn. niektóre klasy będą domyślnie używane. Powstanie też autoloader smile.gif, ponieważ to pozwoli na wybieranie tylko potrzebnych modułów podczas kompilacji. Jak skończę wrzucę poprawioną wersję na serwer smile.gif
I zapomniałbym. Dorzucę też obsługę interfejsów smile.gif Klasę TurView też czeka przebudowa.
dr_bonzo
Cytat
3. Kate nie oferuje takiej opcji, a ja nie jestem przyzwyczajony wciskać co chwilę "Tab".

Zmien edytor, chociazby Kwrite ma autowciecia. A co z eclipse?
Cytat
4. Działa bez mod_rewrite. Tam są tylko dwie testowe reguły, które uruchamiałem na zdalnym serwerze.

Najpierw uruchomilem bez zadnych rewrittow --> undefined index 'vendor' itd.
Strzałek
Nie wiele do oceniania.
Dużo bałaganu widzę, mało czegoś pożytecznego. Np. tursql. Halo! Mamy 2007, mamy PDO, jeżeli ktoś nie lubi to Creole. No ok, chyba że ktoś naprawde chce coś jeszcze lepszego, czemu by nie, ale niech to mam jakąś funkcjonalność, a nie nakładka na kilka natywnych f-cji.

Cytat
Wiem, wiem Cysiaczku, dlatego obecnie przebudowywuję ją całą. Te metody zostaną w takim stanie, gdyż takie je lubię Zmienię też delikatnie strukturę jądra tzn. niektóre klasy będą domyślnie używane. Powstanie też autoloader , ponieważ to pozwoli na wybieranie tylko potrzebnych modułów podczas kompilacji. Jak skończę wrzucę poprawioną wersję na serwer
I zapomniałbym. Dorzucę też obsługę interfejsów Klasę TurView też czeka przebudowa.


To może najpierw zrób z tym pożądek, dopisz co trzeba żeby chciaż ten banalny przykład działa bonzowi winksmiley.jpg
Turgon
Strzałek: Wciąż na wielu serwerach nie ma PDO... Z resztą kilka drobnych klas będących na warsztacie stworzą wraz z TurSQL małego i prostego ORMa ;]
dr_bonzo: Dziwne... W Exception włącz trace i daj tutaj wynik smile.gif


Dodałem poprawioną wersję. I chyba wiem o co chodzi Bonzo winksmiley.jpg
Urle są w formacie : index.php?app=nazwaApp&vendor=nazwaVendor&action=nazwaAction .
Można zawsze zmienić nazwę każdej ze zmiennych. Jeśli którąkolwiek z nich pozostawimy pustą skrypt sam ją uzupełni domyślnymi danymi z kernelImage.php.
dr_bonzo
To ze sa w taki fromacie to sie domyslilem smile.gif pouzupelnialem zmienne na jakies losowe wartosci i nie ruszylo. Zaraz sprawdze nowa wersje.

Cytat
Warning: mysql_connect() [function.mysql-connect.html]: Access denied for user 'root'@'localhost' (using password: NO)

No wiem ze konfigu jeszcze nie ustawilem, ale przydala by sie inna informacja

Wchodze na "/" i undefined index, action, vendor, action.
http://php.dev.localhost/turgoncms/?vendor...mp;action=index
czyli defaultowe wartosci
Cytat
Nie ma takiego vendora.

dla vendor = 'turcms' tez nie dziala


Cytat
public function index(){
$this->view->loadView('index');
return $this->view->render();
}

Po co tyle kodu (jak zapomne to sie pewnie app sypnie, nie wyswietli czegos itd), nie latwiej przyjac ze akcja 'index' jest wyswietlana domyslnie widokiem 'index'? I po co zwracac wynik renderowania -- do zadanie FW, dostal info ktory widok uzyc, jakie ma parametry i sobie poradzi.
Turgon
Wiem, wiem... Nad błędami muszę jeszcze pomyśleć smile.gif
Kolejna sprawa app, to katalog z vendorami smile.gif Powinien być turcms smile.gif lub turpowerboard.
Rozumiesz ?

Co do widoków, to dobra postaram się coś pomyśleć smile.gif, ale mi to nie przeszkadza winksmiley.jpg Ale co ty byś proponował, bo do końca nie łapie winksmiley.jpg?
dr_bonzo
Cytat
Co do widoków, to dobra postaram się coś pomyśleć , ale mi to nie przeszkadza Ale co ty byś proponował, bo do końca nie łapie ?


  1. <?php
  2. public function IndexAction()
  3. {
  4.  $this->text = "HelloWorld";
  5. }
  6. ?>


i FW zajmuje sie reszta, zalacza domysly widok 'index' i odpala renderowanie, bo na razie w kazdej akcji musisz to recznie dopisywac, a to nie jest dobre smile.gif


Cytat
Kolejna sprawa app, to katalog z vendorami Powinien być turcms lub turpowerboard.

No w koncu uruchomilem

Masz dosyc nieintuicyjne nazwy:
jest katalog vendors/ i oczekuje ze w nim sa vendory czyli turcms itd.
a nie ze w vendors/ sa aplikacje
Turgon
Wiem trochę napaprałem ;] Ale w configu można zawsze zmienić nazwę app na coś innego w linku winksmiley.jpg To co proponujesz będzie wymagało przebudowy połowy FW, ale Ok ;] W sumie chyba muszę zmienić nazwę aplikacji i oznaczenie w temacie winksmiley.jpg
dr_bonzo
Cytat
To co proponujesz będzie wymagało przebudowy połowy FW

FW ma chyba ulatwiac i uprzyjemniac pisanie aplikacji -- wiec chyba warto to raz a porzadnie zrobic niz w kazdej aplikacji sie meczyc.
Turgon
Wiem, dlatego przebudowałem, ale coś nie działa hmmm... Na deskę kreślarską wraca biggrin.gif Przebudowa zakończona biggrin.gif Działa tak jak chciałeś ;] Teraz tylko trzeba troche zmienić rejestr systemowy, bo nie jest przystosowany do nowych warunków!
Prph
Witam,

Troche balaganiarski styl programowania. Pomine wciecia, bo nie wiem, czy naprawde tak piszesz, czy edytor zrobil Ci na zlosc i usunal tabulatory. Jednak nie trzymasz sie nazwenictwa - wszystko w FW w postaci turcoś.class.php, natomiast helpery nazwałeś ViewHelpers (dlaczego tu z duzych?).

Znalazłem mały błąd, ktory może powodować w przyszłości złe wyświetlanie widoku:

  1. <?php
  2. $render = ob_get_contents();
  3.  
  4. // Zamiast tego, uzyj:
  5.  
  6. $render = ob_get_clean();
  7. ?>


Pozdrawiam, Adrian.
Turgon
Prph: Trzymam się, bo Helpery to cuś innego ;] dla mnie. Dzięki za tą funkcję, nie wiedziałem, że taka jest smile.gif Co do wcięć ? Po co smile.gif? Edytor ich nie dodaje, to co będę na siłę je robił biggrin.gif

Więc porobiłem wam te wcięcia, a wy zajmijcie się oceną kodu... Nowy Preview wyszedł ;] Zmiany są znaczące smile.gif
Athlan
Jak już się Prph doczepił tych helperów to i ja to zrobie. Przytoczę kawałek kodu
  1. <?php
  2. addPasswordInput($name,$cssId = null,$cssClass = null)
  3. ?>

nie przewidziałeś że np ktoś może sachceć dodać inne parametry, chociażby np style. Czyżby przeróbka funckji? Nie lepiej zrobić, żebym listę parametrów ładował w tablicy?

Funkcje addTextInput() i addPasswordInput() w zasadzie różnią się słowem text/password, nie cierpie proceduralnego kopiowania kodu...

Zabolała mnie jeszcze jedna rzecz. Mianowicie fetching zapytań masz w klasie turquery.class.php, wykonanie ich turquery.class.php, obsługę bazy w tursql.class.php. Powiem tak: SYF. Klasa odpowiedzialna za baze danych powinna stanowić całość. A jak użyja innej bazy danych niż MySQL to chyba komponent turquery.class.php nie pójdzie do kosza? używasz tam funkcji do obsługi mysql... radzę zrobić jedność. Aby połączyć się z bazą muszę także ręcznie wywołać metodę za to odpowiedzialną. Nie wiam jak u Ciebie, ale u mnie w modelu podajesz nazwę klasy odpowiedzilną za obsługę źródła danych, wówczas konfigi, połączenie itd wykonuje się samo smile.gif

W dispatcher
  1. <?php
  2. private static $app;
  3. ?>
po co static?

Obsługa uzytkownika (o mój Boże). Znowu jestem uzależniony od mysql... klasa chyba powinna TYLKO przechowywać info o nim, zbieranie danych z bazy danych to Model smile.gif

  1. <?php
  2. if(count($this->vars) > 0){
  3. foreach($this->vars as $name => $val){
  4. if(!is_array($val)){
  5. $render = preg_replace('/{'.$name.'}/i',$val,$render);
  6. }
  7. }
  8. }
  9. ?>

po co... a nie lepiej wsadzić w template <?= $sText ?> albo <?php= $sText ?> , nie ma to jak szybkość działania.

Rozumiesz co to zmienne statyczne?
  1. <?php
  2. public final function registry($name){
  3. ?>

Używa się ich zazwyczaj w metodach statycznych, a Ty kombinujesz je w normalnych metodach wymagających instancji obiektu.

Podsumowywując... nie jest najlepiej. Przynajmniej takie jest moje zdanie.

Pozdrawiam, Athlan smile.gif

btw polecam zajżeć http://strzalek.net/blog/5/przyjazne-urle-piszemy-router smile.gif
Turgon
Cytat

Odpada ten sposób! PATH_INFO jest blee i tyle.

Cytat
nie przewidziałeś że np ktoś może sachceć dodać inne parametry, chociażby np style. Czyżby przeróbka funckji? Nie lepiej zrobić, żebym listę parametrów ładował w tablicy?

Funkcje addTextInput() i addPasswordInput() w zasadzie różnią się słowem text/password, nie cierpie proceduralnego kopiowania kodu...


Może, mi tego nie potrzeba, ale może jak będę miał trochę wolnego czasu to napiszę, to.
Cytat
Zabolała mnie jeszcze jedna rzecz. Mianowicie fetching zapytań masz w klasie turquery.class.php, wykonanie ich turquery.class.php, obsługę bazy w tursql.class.php. Powiem tak: SYF. Klasa odpowiedzialna za baze danych powinna stanowić całość. A jak użyja innej bazy danych niż MySQL to chyba komponent turquery.class.php nie pójdzie do kosza? używasz tam funkcji do obsługi mysql... radzę zrobić jedność. Aby połączyć się z bazą muszę także ręcznie wywołać metodę za to odpowiedzialną. Nie wiam jak u Ciebie, ale u mnie w modelu podajesz nazwę klasy odpowiedzilną za obsługę źródła danych, wówczas konfigi, połączenie itd wykonuje się samo smilingsmiley.gif


O jedności za przeproszeniem gówno prawda... http://www.codeigniter.com/user_guide/database/examples.html Popisałeś się też logiką w modelu podajesz nazwę klasy odpowiedzialną za obsługę źródła danych. Model to ma robić ! Jakie tutaj configi (przez "c" piszemy w takiej formie jak coś). Może czasem nie potrzebuje się łączyć z bazą danych...

Cytat
po co... a nie lepiej wsadzić w template <?= $sText ?> albo <?php= $sText ?> , nie ma to jak szybkość działania.

Nie podoba się ? Wyłączasz. Mam inne upodobania.

Cytat
po co static?

Potrzebuje w funkcji getVendor() info o app. Bo nie mam ochoty tego wpisywać za każdym razem...

Zdravim
Łukasz
Athlan
Cytat
Odpada ten sposób! PATH_INFO jest blee i tyle.

Niezłe uzasadnienie, powiedziało mi bardzo dużo smile.gif Tutaj masz router napisany przeze mnie, który dokonale obrazuje, że jednak ten sposób nie jest fe smile.gif
http://framework.vgroup.pl/expose-da42a823...1a0c8c2612b.htm

Cytat
O jedności za przeproszeniem gówno prawda...

Chcesz kolejnego warna od mike_mech? tongue.gif (przy okazji pozdrawiam) smile.gif

Ale nie "gówno prawda", napisałeś w pewnym momencie:
Cytat
Popisałeś się też logiką w modelu podajesz nazwę klasy odpowiedzialną za obsługę źródła danych. [ ... ] Może czasem nie potrzebuje się łączyć z bazą danych...

Dzięki, to komplement? Jeżeli nie chcesz się łączyć to chyba nie uzywasz w modelu połączenia z bazą danych nie? U Ciebie jednak nawet jeżeli połączenia nie potrzebuję, muszę się łączyć. zacytuję tutaj linie kodu index.php żeby nie było nieporozumień:
  1. <?php
  2. try{
  3. TurConfig::loadFile('./kernelImage.php');
  4. $kernel = new TurKernel();
  5. $sql = new TurSQL();
  6. $sql->connect();
  7. $sql->selectDb();
  8. TurView::setStyle(TurConfig::get('defaultStyle'));
  9. $user = TurKernel::register('TurUser',new TurUser());
  10. $session = TurKernel::register('TurSession',new TurSession());
  11. echo $kernel->runVendor();
  12. }
  13. ?>


Cytat
Jakie tutaj configi (przez "c" piszemy w takiej formie jak coś).

Tutaj powini wypowiedzieć się ludzie odpowiadający za gramatykę. Nie napiszesz Configuracja tylko konfiguracja, tak samo nie będziesz pisał Controller tylko Kontroler, nie Computer tylko Komputer. To są swego rodzaju neologizmy wprowadzone (już na stałe) do przeciętnego użytku języka polskiego przez programistów.

Pozdrawiam, Athlan smile.gif

-- [edit ] --

O widzę, że zedytowałeś post i dorzuciłeś linka do Manuala CI. Najpierw pomyśl, potem rzucaj linkami. Jawet w CI fetching, querying i połączenie odnoszą się do tego samego komponentu ładowanego poprzez $this->db-> ... smile.gif

Pozdrawiam smile.gif
Turgon
Athlan, nie mam ochoty pisać kolejnego klona ZF, co ty zrobiłeś. I co nie łaska jak nie potrzebujesz wywalić connect ?
Riklaunim
Wieszanie psów na tym forum to już chyba zwyczaj smile.gif Jak dla mnie "Yet Another php Framework" nie ma sensu istnienia. Istnieje kilku dużych graczy jak ZF, CI, Symfony, Mojavi i okolica, Prado..., których frameworki są stabilne i dojrzałe. Dwieście tysięcy kolejnych rozwijanych hobbistycznie nigdy im nie dorówna a rozbijanie programistów na te frameworki spowolni rozwój wszystkich. Ruby ma jeden framework i czy go rubiści lubią czy nie to muszą go używać - a tym samym rozwijać i "stabilizować". Python ma 3 "nowoczesne": Django, Pylons i TurboGears. RoR jak i te Pythonowe oferują pełen ORM, szybko tworzy się w nich aplikacje i są rozwijane przez liczne grona programistów, często z poważnym wsparciem komercyjnym. W Django by włączyć keszowanie memcached wystarczy dodać jedną linijkę w konfiguracji, a aplikacje są zupełnie niezależne od typu bazy danych. Bez XMLa ala propel tongue.gif Z tymi czterema można porównywać jedynie czołówkę frameworków php a czy to będzie 10 czy 3 nie pozostaje bez znaczenia.

I pisanie aplikacji z ograniczoną funkcjonalnością "bo nie ma tego jeszcze na serwerach" jest trochę nie na miejscu. Nie będzie ich na serwerach do póki, ktoś ich nie będzie potrzebował.
Kozee
Zapewne ten post zostanie usunięty ponieważ jest z gatunku off-top ale...

@TURGON:

Jeżeli umieszczasz coś do oceny licz się z tym, że nie zdobędzie to sympatii wszystkich ludzi.
Nie znam się na php i nie oceniam Twojej pracy ale...

...przeglądając Twoje posty na tym forum doszedłem do wniosku, że strasznie lubisz oceniać (czasem wręcz bluzgać) innych przy czym nie potrafisz poradzić sobie z krytyką własnej twórczości (widać to w tym temacie).

Ja umieściłem tutaj (na forum) 2 strony do oceny - obydwie spotkały się z mocną krytyką - i bardzo mnie to cieszy - gdyż uzmysłowiło mi to tylko jak jeszcze muszę się podszkolić.

Dlatego życzę Ci powodzenia w dalszych projektach/pracach ale nie zapominaj, że krytyka to coś dobrego bo uwydatnia błędy i pozwala na ich poprawę.
Nie należy się obrażać ani wdawać w zbędną dyskusję bo to do niczego dobrego nie prowadzi.


To tyle odemnie - nie będe w tym temacie już nic (do)odpisywał...


PS
Jeszcze takie moje małe spostrzeżenie.
Nie wiem czy wszyscy się zgodzą ale...
Wielu jest tutaj krytyków, którzy nie chwalą się na tym forum swoimi dziełami.
Przykładowo, być może ktoś kto mnie krytykuje sam nie jest zbytnim fachowcem a poprostu lubi sobie napisać pare krytycznych słów.
Szczerze, to chciałbym mieć możliwość zobaczenia twórczości kogoś kto mnie ocenia.
Ale to tylko taka mała dygresja...


Pozdrawiam, Kozee ;]
Turgon
@Riklaunim: No to prawda, ale ja po prostu gubię się w ogromie opcji i budowy tych Frameworków. Nie mam najmniejszej ochoty robić z tego coś większego... Zależy mi tylko, żeby to dobrze chodziło i było w miarę zoptymalizowane.

@Kozee: Szanuje opinię każdego, ale też mam własne zdanie na ten temat.
menic
Tak na szybko. Bałagan z widokami. Podziel to jakos, bo w jednym folderze trzymasz głowny template, oraz te pomniejsze dla akcji/vendorow. Kolejna sprawa...Czemu na starcie już łaczysz sie z bazą danych? Rozumiem, ze trzymasz w niej sesje, oraz utytkownikow. A jak aplikacja nie bedzie wymagała obsługi uzytkownika? W kazdej chwili powinienes wlaczyc/wylaczyc uzytkownikow.
To by było na tyle. Aha.. i jeszcze jedno... nie rzucaj sie tak do ludzi jak. Dałes to do oceny wiec ludzie pisza jak mogloby wygladac, aby było lepiej.
Turgon
@menic: Myślę nad tym smile.gif Ale teraz znalazłem mój stary zestaw klas i go odkurzam i dopisuje kolejne klasy smile.gif Dlatego jak na dzień dzisiejszy prace nad TurFrameworkiem są czasowo zawieszone biggrin.gif, ale jak skończę tamto, to wracam od razu do niego!
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.