Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: generowanie zapytan poprzez __get...
Forum PHP.pl > Forum > PHP > Object-oriented programming
kicaj
Mam sobie plik php:
  1. Lorem...
  2. <?php echo $this -> user['first_name']; ?> - <?php echo $this -> user['last_name']; ?>
  3. ...ipsum


Chcialbym stworzyc teraz 2 zmienne, string i tablice
// $sGroup = 'user';
// $aGroup = array( 'first_name', 'last_name' );

Kombinowalem z __get(), ale nie moglem dostac sie do tych nazw...
LBO
$aGroup to jedna zmienna, nie może mieć dwóch wartości jednocześnie - stringa i tablicy.
dr_bonzo
LBO - tam jest sGroup i aGroup smile.gif

pozatym, kicaj, zupelnie nie wiem co chcesz osiagnac
phpion
Również nie wiem co autor chce osiągnąć ale może przyda mu się is_array" title="Zobacz w manualu PHP" target="_manual oraz implode" title="Zobacz w manualu PHP" target="_manual.
Whisller
Hmm chcesz coś takiego?

  1. <?php
  2. class MyExample
  3. {
  4. public function __get($field)
  5. {
  6. isset($this->myArray[$field]) ? return $this->myArray[$field] : '';
  7. }
  8.  
  9. private $myArray = array();
  10. }
  11.  
  12. $obj = new MyExample();
  13. echo $obj->first_name;
  14. echo $obj->last_name;
  15. ?>


Wartosci w tablicy $myArray mozesz w konstruktorze chocby ustawiac.
kicaj
Rzeczywiscie wyrwane z konstektu, nie napisalem co mniej wiecej chce osiagnac.

Kod przedstawiony w moim poscie to cos a'la szablon, chcialbym zebrac wywolane zmienne, na tej zasadzie utworzyc zapytanie SQL: SELECT first_name, last_name FROM user LIMIT 1
Wybeplnic ta tablice i dopiero wyswietlic, niestety nachodzi mnie mysl ze od zlej strony sie za to zabieram...

Jakies propozycje?
Whisller
Trochę jakby od końca dupy smile.gif
Bo w zasadzie mógłbyś to zrobić przy użyciu __get, zebrać nazwy pól w tablicy albo jakieś zmiennej i potem wywoływać ->makeSelect który ci zrobi ten select. Ale sądzę że nie chcesz się ograniczać do tak prostych zapytań. Więc Moim zdaniem idea którą przedstawiasz się kompletnie do tego nie nadaje.
Nie wiem może chcesz osiągnąć coś co zostało już zaimplementowane w propel'u?
Sh4dow
w sumie dalo by sie to zrobic, ale i tak musialbys filtrowac nazwy pol tak zeby nie wypisywac nazw nie istaniejacych w danej tabeli w bazie. Wiec musial bys na podstawie bazy danych robic klase, a wiec to jest Propel, ktory daje juz gotowe rozwiazanie i to z calkiem duzymi mozliwosciami.
kicaj
@Whisller: Na poczatek moga byc proste zapytania, jak mozesz przedstaw bardziej jak to widzisz...

Plik template.phtml
  1. <html>
  2. <head>
  3. <title><?php echo $product_title; ?></title>
  4. </head>
  5. <body>
  6. <h1><?php echo $product_name; ?></h1>
  7. </body>
  8. </html>


Plik "parsera":
  1. <?php
  2. // plik szablonu
  3. $sFile = 'template.phtml';
  4. // pobiera zawartosc szablonu
  5. $sTemplate = file_get_contents( $sFile );
  6. // pobiera nazwy zmiennych (amatorka)
  7. preg_match_all( '/$([a-z_]+)/is', $sTemplate, $aVars );
  8. // laczy pobrane nazwy zmiennych w ciag znakow oddzielonych przecinkami
  9. $sColumns = implode( ', ', $aVars[1] );
  10. // tworzy zapytanie
  11. $sSQL = 'SELECT '. $sColumns .' FROM products';
  12. // tablica wygenerowana z bazy danych
  13. $aProducts = array( 'product_title' => 'Ksiazka PHP', 
  14. 'product_name' => 'PHP. Nowe mozliwosci, wyd. OReilly' );
  15. // konwertuje tablice do postaci:
  16. $product_title = 'Ksiazka PHP';
  17. $product_name = 'PHP. Nowe mozliwosci, wyd. OReilly';
  18. // wyswietla wypelniony szablon
  19. include( $sFile );
  20. ?>


Dziala to poprawnie jak chce, jednak nie jest to zbyt profesjonalnie zrobione, mam nadzieje ze ten kod nakresli co chce osiagnac, mile widziane ciekawsze propozycje...

smile.gif

A jak CakePHP to robi? Jest ktos doswiadczony z CakePHP?
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.