Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady panujące na forum News

1. Posty w tym forum są poddawane moderacji więc nie dodawaj ich kilka razy.
2. Akceptujemy tylko wartościowe wiadomości o php lub pochodnych
3. Publikacja newsa na wortalu po moderacji oscyluje w granicach 30min
4. Wstawiane grafiki powinny mieć maksymalną szerokość 357px

Zapraszamy do uzupełniania wortalu o ciekawe informacje :)

3 Stron V  < 1 2 3 >  
Reply to this topicStart new topic
> Spawn Framework 1.2.6 wydany!
Spawnm
post 19.09.2010, 11:57:58
Post #21





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




@Crozin - chcesz maile/imiona ? Jakiego ty się źródła spodziewasz bo nie za bardzo wiem ...
Go to the top of the page
+Quote Post
phpion
post 19.09.2010, 12:16:35
Post #22





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Jakiegokolwiek źródła, skąd masz takie informacje? Pewnie napiszesz, że z prywatnej korespondencji mailowej - a może jednak podasz jakiegoś linka do poparcia tego stwierdzenia? Przyznam, że jest ono dość odważne...
Go to the top of the page
+Quote Post
Crozin
post 19.09.2010, 12:29:22
Post #23





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Piszesz o "popularnym frameworku" (wiem, że już to sprostowałeś, jednak w pierwszym poście nadal to wisi), "osobach odchodzących od Kohany na rzecz SF" - to wszystko ładnie brzmi, ale jeżeli nie jest poparte jakimiś statystkami to jest to zwyczajne "marketingowe kłamstwo". Poza tym ile osób przerzuciło się na Twoje rozwiązanie? W jaki sposób mierzysz popularność? Chyba nie względem ilości pobrań? Bo w tej chwili właśnie nabiłem Ci statystkę, ale używać tego FW nie mam zamiaru. Ile osób w tym czasie zaczęło korzystać ze wspomnianej Kohany (notabene słaby FW).

Swoją drogą do sprawdzania czy klucz tablicy istnieje jest array_key_exists, nie isset - oto dlaczego

EDIT: zapomniałem dopisać.
Cytat
Dla mnie mały "bałagan". Dlaczego metoda kontrolera może tworzyć inne kontrolery i pobierać od nich akcje? Czy nie powinno się to dziać w frontControlerze (którego chyba nie masz)?
A index.php to niby co to jest jak nie Front Controller? smile.gif I dla jasności: we front kontrolerze nie powinno dochodzić do wywoływania akcji/ustalania co wywłać.

Ten post edytował Crozin 19.09.2010, 12:32:06
Go to the top of the page
+Quote Post
Spawnm
post 19.09.2010, 12:30:00
Post #24





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Wiem że jest dość odważne, możliwe że nawet trochę nie rozsądne na daną chwilę bo mogłem się spodziewać pytań o linki/źródła czy coś.
No ale jednak jak pisałem wcześniej moje 'statystyki' jeśli chodzi po popularność to tylko google analytics z którego takich info nie mam i privy.
Cytat
A to że jest jakaś popularność oceniam po google analytics oraz prywatnych korespondencjach.
Go to the top of the page
+Quote Post
wookieb
post 19.09.2010, 14:12:42
Post #25





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(Crozin @ 19.09.2010, 13:29:22 ) *
Swoją drogą do sprawdzania czy klucz tablicy istnieje jest array_key_exists, nie isset - oto dlaczego

1) array_key_exists jest wiele razy wolniejsze od isset (sprawdzałem, zachęcam do przeprowadzenia testu)
2) najczęściej szukając klucz w pewnej tablicy spodziewamy się iż ma jakąś wartość, więc jeżeli ma null nas to nie interesuje, dlatego lepiej użyć isset

Cytat
A index.php to niby co to jest jak nie Front Controller? smile.gif I dla jasności: we front kontrolerze nie powinno dochodzić do wywoływania akcji/ustalania co wywłać.

Oj chyba jednak powinno. Zresztą wszystko zależy od struktury FW.

Cytat(Spawnm @ 19.09.2010, 11:29:50 ) *
Mocno przesadzasz, ale to pewnie kwestia gustu.

Oczywiście, że nie przesadzam ponieważ twoja klasa formularza służy tylko i wyłącznie do jego wyświetlania.
Nawet nie wspiera:
a) walidacji
cool.gif filtrowania danych
c) nie posiada zabezpieczenia przed xss, tudzież niepoprawnie wyświetla wartości w atrybutach "value"
d) tak naprawdę całą obsługę formularza wraz z wszystkimi standardowymi operacjami isset, trzeba pisać ręcznie.

Co mi po takim narzędziu do formularzy skoro równie dobrze można zamknąć całą jego funkcjonalność w zwykłe szablony.

Cytat
  1. $pager=new sf_pager(array(
  2. 'total'=>sf_orm::factory('news')->count(),
  3. 'limit'=>5
  4. ));
  5. $news=sf_orm::factory('news')->findAll( $pager->offset(), 5);
  6. foreach($news as $key){
  7. echo $key->title.'<br/>';
  8. }
  9. echo $pager->render();

Ok a jak to bedzie wyglądało na zapytaniach bardziej złożonych? Np z joinami?

Cytat
Przejrzyj dokumentację a może stanie się jeszcze prostszy oraz chociaż częściowo zmienisz zdanie o niektórych klasach.

Niee. Napisanie w dokumentacji "tak jest bo jest" nie zmieni mojego zdania, które podałem wcześniej. A szczególnie kładę nacisk na skalowalność.


--------------------
Go to the top of the page
+Quote Post
Crozin
post 19.09.2010, 14:18:08
Post #26





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
1) array_key_exists jest wiele razy wolniejsze od isset (sprawdzałem, zachęcam do przeprowadzenia testu)
2) najczęściej szukając klucz w pewnej tablicy spodziewamy się iż ma jakąś wartość, więc jeżeli ma null nas to nie interesuje, dlatego lepiej użyć isset
Tak, wiem że jest wolniejsze - ale za to działa poprawnie. I nie mów, że jak sprawdzamy czy klucz tablicy istnieje to wartości NULL nas nie interesują bo to już pod bzdurę podchodzi. Zresztą NULL to już jest jakaś wartość i informacja zarazem.
Go to the top of the page
+Quote Post
Spawnm
post 19.09.2010, 14:28:49
Post #27





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Cytat(wookieb @ 19.09.2010, 15:12:42 ) *
Oczywiście, że nie przesadzam ponieważ twoja klasa formularza służy tylko i wyłącznie do jego wyświetlania.
Nawet nie wspiera:
a) walidacji
B) filtrowania danych
c) nie posiada zabezpieczenia przed xss, tudzież niepoprawnie wyświetla wartości w atrybutach "value"
d) tak naprawdę całą obsługę formularza wraz z wszystkimi standardowymi operacjami isset, trzeba pisać ręcznie.

Co mi po takim narzędziu do formularzy skoro równie dobrze można zamknąć całą jego funkcjonalność w zwykłe szablony.

$form->toError($valid->getError()); jeśli chodzi o wsparcie walidacji winksmiley.jpg

"d) tak naprawdę całą obsługę formularza wraz z wszystkimi standardowymi operacjami isset, trzeba pisać ręcznie."
questionmark.gif?

Cytat
Ok a jak to bedzie wyglądało na zapytaniach bardziej złożonych? Np z joinami?

Ale w czym problem? Co takie bajery mają do samej paginacji?

  1. $pager=new sf_pager(array(
  2. 'total'=>sf_orm::factory('news')->with('cos')->where(...)->count(),
  3. 'limit'=>5
  4. ));
  5. $news=sf_orm::factory('news')->with('cos')->where(...)->findAll( $pager->offset(), 5);
  6. foreach($news as $key){
  7. echo $key->title.'<br/>';
  8. }
  9. echo $pager->render();


Go to the top of the page
+Quote Post
wookieb
post 19.09.2010, 16:02:23
Post #28





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(Crozin @ 19.09.2010, 15:18:08 ) *
Tak, wiem że jest wolniejsze - ale za to działa poprawnie. I nie mów, że jak sprawdzamy czy klucz tablicy istnieje to wartości NULL nas nie interesują bo to już pod bzdurę podchodzi. Zresztą NULL to już jest jakaś wartość i informacja zarazem.

W ile procentach przypadków? 5%? Oczywiście, że w większości nas to nie interesuje bo rzadko kiedy trzyma się nulla w tablicy po prostu.

Cytat(Spawnm @ 19.09.2010, 15:28:49 ) *
$form->toError($valid->getError()); jeśli chodzi o wsparcie walidacji winksmiley.jpg

Łoo no to żeś wsparł walidację...

Cytat(Spawnm @ 19.09.2010, 15:28:49 ) *
"d) tak naprawdę całą obsługę formularza wraz z wszystkimi standardowymi operacjami isset, trzeba pisać ręcznie."

Czyli twoja klasa formularza załatwia tylko wyświetlanie ale nie sprawdzi już czy wartość przesłana POST-em w selectcie występuję na liście jego opcji. Nie sprawdzi czy wartość dla elementu powinna być tablicą czy nie. Dodatkowo musisz sprawdzić czy wszystkie pola są aby na pewno w POST (czyli isset($_POST['pole']) itd). Prawdziwa klasa formularza dostaje na wejściu np POST-a i w metodzie getValues() zwraca Ci ładną przygotowaną tablicę wszystkich wartości, które na pewno są prawidłowe (jeżeli dane przeszły walidację)


Cytat
  1. $pager=new sf_pager(array(
  2. 'total'=>sf_orm::factory('news')->with('cos')->where(...)->count(),
  3. 'limit'=>5
  4. ));
  5. $news=sf_orm::factory('news')->with('cos')->where(...)->findAll( $pager->offset(), 5);
  6. foreach($news as $key){
  7. echo $key->title.'<br/>';
  8. }
  9. echo $pager->render();

Sprawdź dokładnie czy to działa, bo w metodzie sf_db::count nie widzę uwzględnienia:
a) joinów
cool.gif where
c) group by
d) having Ci daruje

W metodzie sf__orm::with nie rozróżniasz typów Join-a (LEFT, INNER, OUTER)

Ten post edytował wookieb 19.09.2010, 16:06:05


--------------------
Go to the top of the page
+Quote Post
Spawnm
post 19.09.2010, 16:12:44
Post #29





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Cytat
Czyli twoja klasa formularza załatwia tylko wyświetlanie ale nie sprawdzi już czy wartość przesłana POST-em w selectcie występuję na liście jego opcji. Nie sprawdzi czy wartość dla elementu powinna być tablicą czy nie. Dodatkowo musisz sprawdzić czy wszystkie pola są aby na pewno w POST (czyli isset($_POST['pole']) itd). Prawdziwa klasa formularza dostaje na wejściu np POST-a i w metodzie getValues() zwraca Ci ładną przygotowaną tablicę z listą wszystkich wartości, które na pewno są prawidłowe.

od isset $_POST masz sf_request np. $req->post('dupa');

Cytat
Sprawdź dokładnie czy to działa, bo w metodzie sf_db::where nie widze uwzględnienia:
a) joinów
cool.gif where
c) group by
d) having Ci daruje

No rzeczywiście przez te kropki w where(...) wywala jakiś błąd winksmiley.jpg
A na serio to działać działa z wszystkimi bajerami bo nawet na stronie z fw jest kilka joinów itd. (np. na forum)

Cytat
W metodzie sf__orm::with nie rozróżniasz typów Join-a (LEFT, INNER, OUTER)

Jaśniej , przecież ustawiasz w modelu tabeli 'type'=>'join', //join , join left etc...
Go to the top of the page
+Quote Post
Crozin
post 19.09.2010, 16:13:14
Post #30





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
W ile procentach przypadków? 5%? Oczywiście, że w większości nas to nie interesuje bo rzadko kiedy trzyma się nulla w tablicy po prostu.
5% przypadków to mało? Przy czymś takim 0.1% to już zdecydowanie za dużo. Kod ma sprawdzić czy klucz istnieje - klucz istnieje, a ten zwraca, że nie - to jest po prostu błędny kod i nie ma tu usprawiedliwienia.

To, że Ty rzadko używasz NULLa, to Twoja sprawa - mi się to zdarza relatywnie często.
Go to the top of the page
+Quote Post
wookieb
post 19.09.2010, 16:21:27
Post #31





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(Spawnm @ 19.09.2010, 17:12:44 ) *
od isset $_POST masz sf_request np. $req->post('dupa');

Faktycznie nie zauważyłem na liście smile.gif

Cytat(Spawnm @ 19.09.2010, 17:12:44 ) *
Jaśniej , przecież ustawiasz w modelu tabeli 'type'=>'join', //join , join left etc...

A no tak bo to ORM. A jeżeli zaistnieje konieczność zmiany typu joina to co wtedy? Da się to jakoś zmienić?

Co do paginacji zaraz sprawdzę.
Where działa. Joinów nie sprawdzałem a group by nie działa.
Spaginuj takie zapytanie
  1. SELECT * FROM tabela GROUP BY jakies_pole_powodujace_zwrocenia_mniej_rekordow_niz_w_calej_tabeli


Cytat(Crozin @ 19.09.2010, 17:13:14 ) *
To, że Ty rzadko używasz NULLa, to Twoja sprawa - mi się to zdarza relatywnie często.

Proszę o przykład

Ten post edytował wookieb 19.09.2010, 16:36:06


--------------------
Go to the top of the page
+Quote Post
Crozin
post 19.09.2010, 16:30:01
Post #32





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Proszę o przykład
Ale co, mam Ci podać przykłady użycia NULLa (to, że akurat mowa o NULLu w tablicy nie ma większego znaczenia)?

Przede wszystkim zawsze kiedy chcesz poinformować, że czegoś nie ma, jest nie ustawione, nie istnieje lub nie jest za zainicjalizowane.
Przykładowo: pobierasz dane z bazy i masz kolumnę z NULLem.
Go to the top of the page
+Quote Post
nospor
post 19.09.2010, 16:39:35
Post #33





Grupa: Moderatorzy
Postów: 36 449
Pomógł: 6292
Dołączył: 27.12.2004




Cytat
Przykładowo: pobierasz dane z bazy i masz kolumnę z NULLem.
Do php dotrze to jako pusty tekst a nie jako null.

NIe mniej jednak zgadzam się z Tobą, że isset dajacy dla wartosci null FALSE to pomyłka jakaś.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wookieb
post 19.09.2010, 16:42:27
Post #34





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. isset($rekord['pole']) // ups zapomniałeś podać jakieś pole
  2. array_key_exists('pole', $rekord) && !$rekord['pole'] // ups zapomniałeś podać jakieś pole

Jeżeli to zły przykład to nawet gdy pobierasz rekord z tablicy to raczej znasz strukturę tablicy zwrotnej.


Ja doskonale rozumiem, że null w tablicy może wystąpić ale dzieje się to tak kur.... rzadko (szczególnie, jeżeli w aplikacji używasz mało tablic) że często się to pomija.
W formularzach? isset
W iteratorach? tak tutaj może być array_key_exists - zależy kto jak często używa iteratorów
W szablonach i metodach __set __get nie ma kompletnie żadnej różnicy
Obsługa $_GET, $_POST, $_COOKIE - isset (nie jest możliwe wstawienia NULL-a)
Wszelkie kontenery - jeszcze nie spotkałem przypadku, gdzie kontener musiałby mi przechowywać null-e

Cytat
NIe mniej jednak zgadzam się z Tobą, że isset dajacy dla wartosci null FALSE to pomyłka jakaś.
Jak dla mnie ogromne ułatwienie. Poza tym sama nazwa wskazuje na
is (czy jest) set (ustawiony). Ustawienie wartości na null oznacza jej brak, czyli wartość nie jest ustawiona.

Ten post edytował wookieb 19.09.2010, 16:50:03


--------------------
Go to the top of the page
+Quote Post
Spawnm
post 19.09.2010, 16:48:32
Post #35





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Cytat
A no tak bo to ORM. A jeżeli zaistnieje konieczność zmiany typu joina to co wtedy? Da się to jakoś zmienić?

możesz zadeklarować w modelu tabeli kilka opcji dla with() lub użyć od tak ...->join()->...

Cytat
Co do paginacji zaraz sprawdzę.
Where działa. Joinów nie sprawdzałem a group by nie działa.
Spaginuj takie zapytanie

hmm jeśli chodzi o group to racja, obecnie w count sprawdzam czy jest where i jak nie ma to leci sztywne zapytanie, aby działało trzeba by dać jakikolwiek where np id>0... poprawi się :-)
Go to the top of the page
+Quote Post
wookieb
post 19.09.2010, 16:54:10
Post #36





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(Spawnm @ 19.09.2010, 17:48:32 ) *
możesz zadeklarować w modelu tabeli kilka opcji dla with() lub użyć od tak ...->join()->...

Ok super.

Cytat(Spawnm @ 19.09.2010, 17:48:32 ) *
hmm jeśli chodzi o group to racja, obecnie w count sprawdzam czy jest where i jak nie ma to leci sztywne zapytanie, aby działało trzeba by dać jakikolwiek where np id>0... poprawi się :-)

Niestety nie.
Count dla zapytań z group by robi się w ten sposób
  1. SELECT count(DISTINCT coalesce(pole_z_group_by,1) [, coalesce(pole_z_group_by, 1)] ) FROM tabela [WHERE] -- już bez group by

gdzie coalesce wstawiasz tylko dla tych pól, które mogą mieć NULL w wartości

Przy having jest chyba jeszcze trudniej.

Ten post edytował wookieb 19.09.2010, 17:04:02


--------------------
Go to the top of the page
+Quote Post
Crozin
post 19.09.2010, 17:29:19
Post #37





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Do php dotrze to jako pusty tekst a nie jako null.
Z niedowierzania aż sprawdziłem:
Kod
mysql> SELECT colname FROM nulltest;
+---------+
| colname |
+---------+
| NULL    |
|         |
+---------+
2 rows in set (0.00 sec)
Jeden wiersz to pusty tekst, drugi NULL
  1. <?php
  2.  
  3. $h = new PDO('mysql:host=127.0.0.1;dbname=test;', 'root', '');
  4. $stmt = $h->query('SELECT colname FROM nulltest;');
  5. var_dump($stmt->fetchAll());
Wynik:
Kod
array
  0 =>
    array
      'colname' => null
      0 => null
  1 =>
    array
      'colname' => string '' (length=0)
      0 => string '' (length=0)


Cytat
Ja doskonale rozumiem, że null w tablicy może wystąpić ale dzieje się to tak kur.... rzadko (szczególnie, jeżeli w aplikacji używasz mało tablic) że często się to pomija.
To, że nie jest to jakieś wyjątkowo częste zjawisko to chyba wszyscy się zgadzamy. Ale ono występuje i trzeba to mieć na uwadze, bo w końcu wystąpi i będziesz przez 5 godzin szukał przyczyny - albo co gorsza, nie zauważysz błędu. isset jest szybsze, ale się nie nadaje, bo nie spełnia warunków - nie jest w stanie określić czy klucz tablicy istnieje - to jaką on ma wartość to nas nie interesuje.

Cytat
Ustawienie wartości na null oznacza jej brak, czyli wartość nie jest ustawiona.
Tak - wartość nie jest ustawiona - ale klucz już tak. Poza tym brak wartości to już wartość. Czym innym jest $a = null;, a czym innym jest w ogóle nie istnienie zmiennej $a.
Go to the top of the page
+Quote Post
wookieb
post 19.09.2010, 17:33:10
Post #38





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Hehe Crozin nie rozumiemy się smile.gif
Ja nie mówię, że array_key_exists nie powinno się używać. Jak najbardziej powinno ale tylko w miejscach w których możliwe jest wstawienie NULL-a tylko, że tych miejsc jest wyjątkowo mało smile.gif


--------------------
Go to the top of the page
+Quote Post
Crozin
post 19.09.2010, 17:58:35
Post #39





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
tylko, że tych miejsc jest wyjątkowo mało
Właściwie to można przyjąć, że w $_GET/$_POST/$_COOKIE nie ma nulli - chociaż jakby się uparł ($_POST['a'] = null; (notabene PHP powinien obsługiwać final dla zmiennych) - ale jak występuje takie coś to ktoś już ma dużo poważniejszy problem :]). Wszędzie indziej mogą wystąpić i prędzej czy później wystąpią.
Go to the top of the page
+Quote Post
Spawnm
post 19.09.2010, 18:06:38
Post #40





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




A ja mam pytanie - wypomniałeś mi że używam isset zamiast array_key_exists - gdzie twoim zdaniem lepiej sprawdzi się array_key_exists bo osobiście nie widzę takiego miejsca?
Go to the top of the page
+Quote Post

3 Stron V  < 1 2 3 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.04.2024 - 13:02