Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: form generator/builder
Forum PHP.pl > Forum > PHP > Frameworki
marcio
Witam chcialem sie zapytac czy zend fw/symfony/kohana lub jakis inny fw posiadaja klase do generowania formularzy z information shcema z mysql?
Nie chodzi mi o "helpery" z gotowymi funkcjami do generowania input'ow itp...tylko cos takiego:
  1. $oform = new FormBuilder($this -> $db -> query('select login,passwd,email from users where id = 1'));

I chcialbym miec juz gotowy formularz do np edycji danych.
Wiem ze cos takiego istnieje ale teraz nie potrafie znalesc...
destroyerr
W symfony takie formularze są w zasadzie tylko do wygenerowane, chociaż można i by zrobić to w locie.
Wiem, że do Kohany jest sporo różnych bibliotek i do formularzy i do obsługi bazy.
Spawnm
Hmm tego typu klasę to raczej sam powinieneś zrobić z wykorzystaniem klasy do inputów.
Pamiętaj że gdzieś wcześniej trzeba by zadeklarować jaki typ inputa dla jakiej nazwy z bazy.
marcio
Cytat
Hmm tego typu klasę to raczej sam powinieneś zrobić z wykorzystaniem klasy do inputów.
Pamiętaj że gdzieś wcześniej trzeba by zadeklarować jaki typ inputa dla jakiej nazwy z bazy.

kurde wlasnie juz cos takiego widzialem tylko ze na podstawie typu kolumny w tabeli ustawial ze np username byl typu char czy tam varchar to ustawial <input type="text" ale tak szczerze mowiac na podstawie nazwy kolumny byloby to o wiele latwiej zrobic.
destroyerr
Cytat
zadeklarować jaki typ inputa dla jakiej nazwy z bazy

Właśnie chodzi o to, że nie trzeba rozpoznawać na podstawie nazwy kolumny tylko na podstawie jej typu.
Spawnm
A mogę prosić o podanie listy w formie
'typ w bazie' -> 'typ formularza'
z tym że typ z bazy podajcie dokładnie czyli np. tinyint(4)
(to zaraz dam gotowca biggrin.gif )

Jestem ciekaw dla jakiś wartości nie wliczając text => textarea był by inny input niż type=text ;]

+ jak widzicie spr czy ma być type=password bez deklaracji tablicy nazw ?

//edit
dobra te bajery typu pass to jednak można by przez dodatkowy parametr z tablicą smile.gif
marcio
Cytat(Spawnm @ 27.10.2010, 20:21:56 ) *
A mogę prosić o podanie listy w formie
'typ w bazie' -> 'typ formularza'
z tym że typ z bazy podajcie dokładnie czyli np. tinyint(4)
(to zaraz dam gotowca biggrin.gif )

Jestem ciekaw dla jakiś wartości nie wliczając text => textarea był by inny input niż type=text ;]

+ jak widzicie spr czy ma być type=password bez deklaracji tablicy nazw ?

//edit
dobra te bajery typu pass to jednak można by przez dodatkowy parametr z tablicą smile.gif

NO wlasnie juz sa komplikacje z polami text i passwd a co dopiero jak kombinowac z form upload?
Chyba pokombinuje za pomoca defaulowych nazw ewentalnie bedzie mozna dodawac dynamicznie nowe nazwy i tag html dla nich

I na jakiej zasadzie rozponac checkbox/radio/menu?
Spawnm
http://spawnframework.com/drivers/sf_form_builder.tar.gz
miłej zabawy snitch.gif
destroyerr
@Spawnm wybacz, ale to nawet szkic nie jest. W takim wypadku lepiej już skorzystać z SQL Buddy lub phpMyAdmin.

Cytat
I na jakiej zasadzie rozponac checkbox/radio/menu?

Pewnie na takiej samej jak robisz to sam, ręcznie. Wszystko zależy od kontekstu w jakim używasz tych pól.
marcio
Cytat(destroyerr @ 27.10.2010, 21:44:46 ) *
@Spawnm wybacz, ale to nawet szkic nie jest. W takim wypadku lepiej już skorzystać z SQL Buddy lub phpMyAdmin.


Pewnie na takiej samej jak robisz to sam, ręcznie. Wszystko zależy od kontekstu w jakim używasz tych pól.

Haha w sumie masz racje podswiadomie pomyslalem o tym jednak jakos nie skumalem ;] nie wiem jak to wytlumaczyc ;p

@Spawnm zrobimy tak dzis napisze glowny szkielet tego form builder'a a jutro spojrze na twoja klase bo jak nie to popsuje sobie zabawe a juz idee i zarys mam snitch.gif
phpion
Cytat(marcio @ 27.10.2010, 19:27:36 ) *
Witam chcialem sie zapytac czy zend fw/symfony/kohana lub jakis inny fw posiadaja klase do generowania formularzy z information shcema z mysql?

Kohana ma moduł Formo, który natomiast posiada plugin ORM, który stworzy formularz na podstawie schematu bazy danych (modelu) z uwzględnieniem relacji. CodeIgniter ma podobne narzędzie wbudowane w siebie i nazwane Scaffolding. Symfony natomiast posiada generator admina. Masz w czym wybierać smile.gif
skowron-line
Szkoda że
Kod
show columns from (..)
nie pokazuje komentarzy nałożonych na daną kolumnę, wtedy tam można by upychać takie informacje.
marcio
http://3paste.com/s/1918
http://marcio.ekmll.com/formbuilider.php -> mozna zobaczyc

Wczoraj skombinowalem cos takiego, jednak nie wiem jak zrobic zeby dane pole moglo byc typu text/checkbox/menu/radio.
Nie wiem jak to latwo wykombinowac albo zrobic jakies "dynamiczne" settery gdzie mozna byc zmienic zawartosc klucza w $db_equivalent_field ktory by np zmienial wartosc dla klucza login z text na checkbox lub menu i opcjonalnie podac parametry ktore moga byc w menu.

I co w ogole o tym myslicie?
skowron-line
Cytat(marcio @ 29.10.2010, 12:47:15 ) *
I co w ogole o tym myslicie?

Pokaż kod z przykładu
  1. public static function open_rows_and_cols() {
  2.  
  3. if(self::get_table())
  4. self::$form .= '<tr><td align="center">';
  5.  
  6. }
  7.  
  8.  
  9. public static function close_rows_and_cols() {
  10.  
  11. if(self::get_table())
  12. self::$form .= '</td></tr>';
  13.  
  14. }

Nie każdy wsadza wszystko w tabelki, czyli pod tym względem kicha.
marcio
To jest kwiesta 2 linijek kodu zeby dodac opcje czy maja automatycznie byc tabelki czy tylko czysty form i pozniej samemu sie ostyluje..

CHodzi mi ogolnie o idee dzialania i jak rozwiazac ten problem o ktory pytalem...

Dobranoc tak ogolnie ;**
Cytat
Pokaż kod z przykładu

tzn?w linku z cpaste jest wszystko...



jakis pomysl?bo ja mam jakas idee ale wydaje mi sie ze mozna zrobic to lepiej...

ok form builider prawie gotowy dzis mialem troche czasu i jakos wyszedl, dzis jeszcze dokoncze.

To teraz przejdzmy do nastepnego problemu...

Po pierwsze chcialem zapytac na jakies zasadzie admin generator generuje dane z usuwaniem,edycja i dodawaniem?
Po drugie, widzialem ze niektore form builider'y maja juz walidacje w nie wbudowane, nie ktore korzystaja z niezaleznego lib'a.

Wbudowany walidator wedlug mnie ma ten plus ze znajac juz typ i nazwe kolumny z bazy(ktory jest pobierany automatycznie) mozna ustawic ze np pole email oprocz tego ze ma miec input typy text to mozna mu ustawic reguly do walidacji typu:
  1. $fields = array('email' => array('input' => 'text', 'validation_rule' => array('required', 'isEmail'));

Cos w tym stylu potem wystarczyloby tylko obsluzyc wcisniecie submit'a i tyle walidacja dzialalaby automatycznie...

Co wy na to?

btw: idee jak ma dzialas taki prosty admin generator juz mam ale chce uslyszec idee innych jesli ktos taka posiada..
Crozin
Cytat
To jest kwiesta 2 linijek kodu zeby dodac opcje czy maja automatycznie byc tabelki czy tylko czysty form i pozniej samemu sie ostyluje..
Tyle się tłucze: jeden obiekt jedno zadanie.
Do renderowania formularza w HTMLu użyj osobnego obiektu, który co najwyżej operuje na obiekcie formularza.

Cytat
Po pierwsze chcialem zapytac na jakies zasadzie admin generator generuje dane z usuwaniem,edycja i dodawaniem?
Chodzi Ci o to jak zautomatyzować operacje CRUD dla danych? Dosyć prosto, wystarczy, że modele będą implementować pewien zestaw interfejsów na których opierać się będzie jeden uniwersalny kontroler oraz widok. Co prawda tutaj poruszyłem kwestię MVC, ale to bez większego znaczenia.

Przykładowe interfejsy jakie mogłyby się przydać (wybacz za ewentualne dziwne nazwy):
  1. <?php
  2.  
  3. // Sposób wyświetlania:
  4.  
  5. interface Fetchable {
  6. public function retrieve();
  7. public function retrieveOne($id);
  8. }
  9.  
  10. interface List extends Fetchable { }
  11.  
  12. interface Table extends List {
  13. public function getColumns();
  14. }
  15.  
  16. // "Bajery" przy liście wszystkich rekordów
  17.  
  18. interface Paginable {
  19. public function getOffset();
  20. public function setOffset($offset);
  21. public function getLimit();
  22. public function setLimit($limit);
  23. }
  24.  
  25. interface Sortable {
  26. public function getColumn();
  27. public function setColumn($column);
  28. public function getDirection();
  29. public function setDirection($direction);
  30. }
W zależności od tego jak wygląda sprawa z obsługą formularzy konieczne może okazać się dopisanie kilku interfejsów, które będą pozwalały na uaktualnianie obiektu/rekordu.

Cytat
Cos w tym stylu potem wystarczyloby tylko obsluzyc wcisniecie submit'a i tyle walidacja dzialalaby automatycznie...
Na podstawie typu kolumny w bazie danych możesz co najwyżej sprawdzić czy format danych jest prawidłowy, a to najczęściej za mało. Przypuśćmy, że masz kolumnę publish_at typu DATE. Taki automat spisze się przy sprawdzeniu czy wprowadzone dane mają format YYYY-MM-DD, ale nie sprawdzi już czy data nie jest aby przypadkiem datą przeszłą, albo czy nie jest to rok 2054.

Cytat
Co wy na to?
Określanie reguł walidacji tekstem, zamiast obiektami implementującymi odpowiedni(e) interfejs to proszenie się o wielki ból dupy. winksmiley.jpg
marcio
Cytat
Tyle się tłucze: jeden obiekt jedno zadanie.
Do renderowania formularza w HTMLu użyj osobnego obiektu, który co najwyżej operuje na obiekcie formularza.

Moglbys to przepisac na 2 linijki kodu bo tak to nie bardzo skumalem....taki mini przyklad ktory pokarze mi o co chodzi
Cytat
Chodzi Ci o to jak zautomatyzować operacje CRUD dla danych? Dosyć prosto, wystarczy, że modele będą implementować pewien zestaw interfejsów na których opierać się będzie jeden uniwersalny kontroler oraz widok. Co prawda tutaj poruszyłem kwestię MVC, ale to bez większego znaczenia.

No wlasnie nie chcialem az tak "kombinowac".
Myslalem o czyms prostszym i troche bardziej prymitywnym ;p

Mniej wiecej tak by to mialo wygladac.
Pobieramy wszystkie kolumny z danej tabeli np news czyli kolumny(id,author,title,content,date)
ustawiamy ze np kolumna id i/lub date nie powinny byc np wyswietlane.
No i poprostu tworzymy prosty panel jeden news pod drugim przy nich 2 ikonki edii i delete i na dole panelu mamy add.
Potem tylko trzeba zaprogramowac proste zdarzenia jak edycja i usuwanie news'ow jak i ich dodawanie

Co do walidacji formularzy masz racje niech inna klasa tym sie zajmie ;]
Crozin
Cytat
No wlasnie nie chcialem az tak "kombinowac".
OK, gdzie tam masz jakieś kombinowanie, poza podstawowym wykorzystaniem elementów OOP?

Cytat
Moglbys to przepisac na 2 linijki kodu bo tak to nie bardzo skumalem....taki mini przyklad ktory pokarze mi o co chodzi
  1. <?php
  2.  
  3. class Form {
  4. // To się zajmuje reprezentacją formularza "dla PHP"
  5. }
  6.  
  7. interface FormRenderer {
  8. public function __construct(Form $form);
  9.  
  10. public function render();
  11. public function renderField($field);
  12.  
  13. // ewentualnie jakieś:
  14. public function renderLabel($field);
  15. public function renderHiddenFields();
  16. }
  17.  
  18. class DlFormRenderer implements FormRenderer {
  19. protected $form;
  20.  
  21. public function __construct(Form $form) {
  22. $this->form = $form;
  23. }
  24.  
  25. public function render() {
  26. $renderedFields = array();
  27.  
  28. foreach ($this->form->getFields() as $name => $field) {
  29. $renderedFields = $this->renderField($name);
  30. }
  31.  
  32. return implode('', $renderedFields);
  33. }
  34.  
  35. public function renderField($field) {
  36. // ...
  37. }
  38. }
Oczywiście ten interfejs powinien być nieco bardziej rozbudowany.
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.