![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Witam,
chciałem zobaczyć jak Symfony2 poradzi sobie jako API i w tym celu chciałem wykorzystać ActionScript3.0 + Symfony2 (PHP) więc mam sobie jakąś aplikację, która wysyła z flasha json ( { id:1 } ) więc flash oczekuje wszystkich kolumn, które należą do ID = 1. Jako z tym nie mam problemu, bo normalnie mogę zrobić to tak:
ale jak to samo zrobić w Symfony2 ?
var_dump zwraca
Ale nijak nie potrafię się po tym ruszyć... EDIT:: Doszedłem do tego, że po zmianie w klasie Userzy.php (entity) z private na public mam dostęp do np print $entities[0]->name; w przeciwnym razie otrzymuję error Cannot access private property SimonMedia\ApiBundle\Entity\Userzy::$name in F:\WORK\labs\Symfony\ApiID\src\SimonMedia\ApiBundle\Controller\DefaultController.php on line 28 Ale chyba taka zmiana nie jest dobra i nie na tym to ma polegać ? Ten post edytował Szymciosek 16.09.2012, 11:06:44 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Pokaz klase entity, powinienes w niej miec gettery/settery zeby uzywac wlasciwosci klas private
-------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Owszem mam.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Nie rozumiem.
Robisz petle na obiekcie i potem wywolujesz gettery -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Czyli jak ?
Mam problem nawet z dostaniem się do pojedynczej wartości z array/object a o pętli nie wspomnę... Chociaż chwila, bo chyba coś mam... Ten post edytował Szymciosek 16.09.2012, 13:07:32 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 10 Dołączył: 16.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tworzysz sobie w repozytorium "Userzy" metodę, która zwraca kolekcję użytkowników jako tablicę.
W kontrolerze przekazujesz zmienną do widoku. Jeśli chcesz używać adnotacji @Template nie zapomnij, żeby w szablonie przekonwertować tą zmienną do json. Możesz też od razu w repozytorium potraktować zwróconą kolekcję json_encode, jak zrobisz zależy od Twojej organizacji kodu. Inna ważna sprawa, to odpowiedni nagłówek w odpowiedzi zwrotnej. Możesz w routingu zdefiniować domyślny parametr, który nazywa się "_format" i wtedy Symfony automatycznie wyśle odpowiedni nagłówek. Możesz też ustawić nagłówek bezpośrednio w kontrolerze manipulując obiektem Response. Nie zapominaj, że kontroler w Symfony powinien zwrócić obiekt Response, a to czy go zwracasz pomagając sobie adnotacjami, czy przez metody pomocnicze kontrolera to sprawa drugorzędna. Nie rozumiem, dlaczego próbujesz dostać się do właściwości obiektu nie używając metod dostępowych. Przecież operujesz na obiektach, wiec po to masz w klasie Entity metody dostępowe (get* i set*), żeby ich używać, a nie bezpośrednio używać prywatnych czy chronionych właściwości. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Możesz powiedzieć coś więcej o tej metodzie ?
Potrzebuję uzyskać coś takiego: Kod { user: [ {name:Janusz}, {name:Marek}, {name:Mariusz} ] } a na razie mam: Kod {"user":{"name":"Mariusz"}} za pomocą takiego kodu, co w ogóle nie jest zautomatyzowane za bardzo...
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Z takim problemem sobie poradziłem i działa ok dzięki wam, ale mam następny problem, w poprzednim miałem podane ID, a teraz potrzebuję skorzystać z findAll();
doszedłem do takiego miejsca i dalej nie wiem co...
Niestety zwracana $data w postaci json wygląda tak: Kod {"data":{"users":[{"name":"Janusz"},{"phone":"668559634"},{"name":"Marek"},{"phone":"665583999"},{"name":"Mariusz"},{"phone":"994888777"}]}} a powinien: Kod {"data":{"users":[{"name":"Janusz","phone":"668559634"},{"name":"Marek","phone":"665583999"},{"name":"Mariusz","phone":"994888777"}]}} Czyli gdzieś za dużo razy tworzony jest array, zakładam, że w drugiej pętli foreach, ale tak jakoś musiałbym to mieć... tablica $cols jest tworzona:
Kombinowałem na różne sposoby z $data[$cols], $data = array..., $data[], explode, ale nie mogę wpaść na pomysł jak to rozwiązać... Proszę o pomoc. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Tak na szybko:
Albo jakos tak nie wiem dokladnie jak wyglada $cols. -------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Może warto najpierw zapoznać się z podstawami PHP, a nie rzucać się od razu na frameworka i to na dodatek takiego, który do najprostszych nie należy. Masz problem, gdyż za każdym razem dokładasz nowy element do tablicy "głównej". Wewnątrz drugiej pętli powinieneś stworzyć strukturę pojedynczego użytkownika, a poza tą pętlą dokładać ją do tablicy głównej. Wykorzystaj zatem jeszcze jedną tablicę pomocniczą. Nie zapomnij jednak o jej zerowaniu w odpowiednim miejscu. Kombinuj!
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Niestety, próbowałem już chyba na wszystkie sposoby, próbuję od 2 dobrych dni... i bezskutecznie...
teraz po Twojej wypowiedzi próbowałem coś na wzór:
lecz też bezskutecznie, bo otrzymuję: Kod {"data":{"users":[[{"name":"Janusz"},{"name":"668559634"}],[{"name":"Marek"},{"name":"665583999"}],[{"name":"Mariusz"},{"name":"994888777"}]]}} , a miałoby to być parami, do tego miałoby to być name, phone, name, phone, name, phone itd...cols wygląda tak: Kod Array ( [0] => name [1] => phone ) Zaprzęgnąłem do tego również znajomego, który jest o wiele lepszym programistą ode mnie, ale niestety też nie pomógł... Czy to w ogóle jest możliwe do zrobienia ? Przepraszam za zawracanie wam tyłka, ale naprawdę już nie wiem co i jak zrobić żeby to osiągnąć... szukam, czytam o tablicach, próbuję swoimi sposobami, spróbówałem z $tmp i nic... Ten post edytował Szymciosek 20.09.2012, 17:01:08 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Spróbuj tego:
Pisane oczywiście w ciemno, ale wydaje mi się, że powinno być ok. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Działa bardzo dobrze, ale chyba nie wpadłbym na to tak szybko, chociaż z tego co widzę - co zrobiłem - to krążyłem bardzo blisko chyba ?
Dziękuję Ci bardzo dobry człowieku ![]() Czyli albo źle składałem $tmp, albo źle później składałem $data itd... Ten post edytował Szymciosek 20.09.2012, 18:25:11 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 2 Dołączył: 1.10.2012 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Osobiście sugerowałbym wpierw zbudowanie odpowiedniej tablicy, z encji poprzez użycie metody toArray() którą można sobie zdefiniować w modelu a następnie zwrócenie odpowiedniego response. Trochę może zamotałem więc pokaże w kodzie o co mi chodzi
Tu już chodzi mi tylko o to aby rozwiązanie było nieco bardziej eleganckie ![]() Ten post edytował netrat 1.10.2012, 20:59:01 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
No a jak wtedy wygląda metoda toArray ?
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 435 Pomógł: 40 Dołączył: 16.02.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Zamiast ręcznie transformować obiekty na tablice, potem json_encode to radzę zainteresować się świetnym Bundlem:
http://jmsyst.com/bundles/JMSSerializerBundle Adnotacjami w modelach oznaczasz jak ma być serializowany/deserializowany. A potem bezproblemowo serializujesz do xmla/jsona. -------------------- Linkedin | ...
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Witam ponownie, nie chciałem zakładać nowego tematu tylko zapytam tutaj.
Jak sprawdzić czy dana kolumna istnieje nie pobierając z entity wszystkich danych ? Tzn. mam takiego coś:
i teraz jeśli zrobię otrzymuję: Kod object(Doctrine\ORM\EntityRepository)[364] ... public 'fieldNames' => array (size=13) 'id' => string 'id' (length=2) 'username' => string 'username' (length=8) 'first_name' => string 'first_name' (length=10) 'last_name' => string 'last_name' (length=9) 'email_address' => string 'email_address' (length=13) 'locale' => string 'locale' (length=6) 'password' => string 'password' (length=8) 'created' => string 'created' (length=7) 'last_login' => string 'last_login' (length=10) 'user_rank' => string 'user_rank' (length=9) 'active' => string 'active' (length=6) 'user_token' => string 'user_token' (length=10) 'ip_address' => string 'ip_address' (length=10) public 'columnNames' => array (size=13) 'id' => string 'id' (length=2) 'username' => string 'username' (length=8) 'first_name' => string 'first_name' (length=10) 'last_name' => string 'last_name' (length=9) 'email_address' => string 'email_address' (length=13) 'locale' => string 'locale' (length=6) 'password' => string 'password' (length=8) 'created' => string 'created' (length=7) 'last_login' => string 'last_login' (length=10) 'user_rank' => string 'user_rank' (length=9) 'active' => string 'active' (length=6) 'user_token' => string 'user_token' (length=10) 'ip_address' => string 'ip_address' (length=10) ... I oczywiście chce się dostać do fieldNames lub columnNames, bo widzę, że to, to samo więc nie powinno robić różnicy, które wybiorę. Podczas pobrania wszystkich danych za pomocą findAll() zadanie byłoby ułatwione, bo dostanę wtedy wszystkie kolumny i ich wartości, lecz nie o to mi chodzi, bo przyjdzie sytuacja, w której będę musiał pobrać tylko username i first_name i co wtedy ? Za pomocą createQuery("SHOW COLUMNS... nie jestem w stanie tego zrobić, bo wywala mi błąd, że takie rzeczy jak INSERT INTO czy właśnie SHOW, bo otrzymuję: [Syntax Error] line 0, col 0: Error: Expected SELECT, UPDATE or DELETE, got 'SHOW' Ten post edytował Szymciosek 13.10.2012, 14:00:58 |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 10 Dołączył: 16.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
To wszystko jest opisane w dokumentacji Doctrine.
Z treści twojego pytania nie wiadomo, czy chcesz sprawdzić, czy kolumna fizycznie istnieje w bazie, czy tylko chcesz wybrać wybrane kolumny podczas budowania zapytania. Zrozumiałem, że chodzi o to drugie. W takim wypadku tworzysz sobie w twoim repozytorium metodę zwracającą to co ma zwracać, np. za pomocą QueryBuilder. |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Właśnie chodzi o to czy kolumna istnieje w bazie, bo żeby wszystko zadziałało Entity musi być zbudowane na podstawie bazy, więc musi z nią współpracować.
Normalnie zrobiłbym np. coś w tym stylu: Kod SHOW COLUMNS FROM users WHERE Field='id'; następnie sprawdzał czy zapytanie coś zwraca i jeśli zwraca, to istnieje, jeśli nie to error. Równie dobrze mogę sprawdzać czy istnieje metoda w klasie Entity, ale to rozwiązanie nie jest dobre, bo musiałbym przelecieć przez array w pętli i sprawdzać, które istnieją itd... m44 możesz powiedzieć coś więcej ? Ten post edytował Szymciosek 13.10.2012, 20:03:16 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 13:19 |