Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klasy modelu
rsobczuk
post 4.02.2008, 18:15:25
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Stworzyłem sobie w Symfony nowy komponent. Są to 2 flagi, które pozwolą zmienić mi język aplikacji (np z PL na EN). Komponent ten wyświetla się na wszystkich stronach (jest wywołany w layout.php).
Po kliknięciu którejś z flag wywołana jest akcja np. ......../language/change/l/polish
Chciał bym, żeby po wykonaniu akcji executeChange() strona została przekierowana do miejsca z którego została wykonana akcja zmiany języka.
Dziękuję z góry za pomoc.
RS

Ten post edytował rsobczuk 5.02.2008, 17:00:34
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
defrag
post 4.02.2008, 21:14:31
Post #2





Grupa: Zarejestrowani
Postów: 82
Pomógł: 3
Dołączył: 15.01.2007

Ostrzeżenie: (10%)
X----


Po wywolaniu w filtrze $filterChain->execute(); mozesz sobie ustawic $user->setAttribute('back', $request->getUri() ); i wtedy to atrybutu z sesji spowrotem zrobic redirect
Go to the top of the page
+Quote Post
rsobczuk
post 4.02.2008, 22:11:30
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Czyli mam rozumieć, że muszę sobie zapamiętać gdzieś (może być w sesji) na jakiej stronie aktualnie się znajduję?
Go to the top of the page
+Quote Post
mike
post 4.02.2008, 22:36:07
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


A po co tak kombinować?
Obiekt WebRequest ma metodę getReferer().
Zrób co masz zrobić i przekieruj na referera smile.gif
Go to the top of the page
+Quote Post
rsobczuk
post 4.02.2008, 23:34:34
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Działa super!!!
Mam jeszcze inne pytanko:
Stworzyłem sobie moduł A i w nim mam akcje... Jedna z akcji zapisuje coś do bazy danych (AkcjaZapisz).
Czy możliwe jest wywołanie tej akcji (AkcjaZapisz) z modułu A w jakiejś innej akcji w module B?
AkcjęZapisz chciał bym wywoływać z innej akcji innego modułu lub z dowolnego pliku template'u.

Dodatkowo...
Stworzyłem sobie komponent, który mogę wywołać z poziomu template'u, ale nie wiem, czy można ten sam komponent wywołać z poziomu akcji - komponent nic nie pokazuje na ekranie,ale zapisuje coś w bazie danych...

Być może gdzieś pobłądziłem, bo chodzi mi o to, żeby przy każdej akcji jaka następuje na stronie coś zapisało się do bazy danych - coś w stylu zapisywania logów. Nie chcę tworzyć zwykłych funkcji, a potem include, które coś wrzucają do bazy, ale chcę użyć w pełni symfony i modelu ORM.

Pozdrawiam
RS

Ten post edytował rsobczuk 4.02.2008, 23:44:26
Go to the top of the page
+Quote Post
destroyerr
post 5.02.2008, 00:21:11
Post #6





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Jeśli chodzi o coś w stylu logów to zastosuj do tego filtr. Polecam przeczytać książkę, wszystkie tego typu informacje są w niej zawarte, jeśli nie są podane bezpośrednio to wielu rzeczy można się z niej domyśleć.

Co do modułu A i B to nic nie zrozumiałem.
Go to the top of the page
+Quote Post
rsobczuk
post 5.02.2008, 10:44:01
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Zapomnij o tym A i B. Chodzi mi o to, że chciał bym stworzyć sobie jakąś klasę, która będzie zapisywała mi coś w bazie danych. Klasa powinna być dostępna z poziomu każdej akcji w aplikacji/projekcie. Do budowy klasy -budowy zapytań chciał bym użyć ORM.
Dzięki
Rafał
Go to the top of the page
+Quote Post
mike
post 5.02.2008, 10:59:29
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Do tego właśnie masz klasy modeli. Propel generuje modele na podstawie encji bazy danych.
Wygenerowane klasy znajdziesz w lib/models (z tego co pamiętam). I tam bawisz się ORMem.

Czytałeś w ogóle dokumentację? Odnoszę wrażenie, że nie.
Go to the top of the page
+Quote Post
rsobczuk
post 5.02.2008, 12:08:08
Post #9





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Dzięki za naprowadzenie. To chyba to, o co mi chodziło. Dokumentację przeczytałem, ale nie do końca, chociaż o klasach modeli przeczytałem, ale nie uważnie widocznie... po robocie jestem za bardzo zmęczony... musiało mi to uciec.
Tak naprawdę nie jestem pewien, czy Symfony jest w stanie dać mi to, czego oczekuję i staram się to wykorzystywać jak narazie metodą prób i błędów.
Dzięki raz jeszcze
Rafał
Go to the top of the page
+Quote Post
mike
post 5.02.2008, 12:52:41
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(rsobczuk @ 5.02.2008, 12:08:08 ) *
Tak naprawdę nie jestem pewien, czy Symfony jest w stanie dać mi to, czego oczekuję i staram się to wykorzystywać jak narazie metodą prób i błędów.
To zależy czego oczekujesz smile.gif
Go to the top of the page
+Quote Post
rsobczuk
post 5.02.2008, 13:41:41
Post #11





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Jakiś czas temu w poprzedniej firmie stworzyliśmy framework, który bazował na Smarty. Część rzeczy działa w nim podobnie. Był to jednak framework uzywany tylko u nas w firmie. Całkiem fajnie tworzyło się w nim aplikacje i stronki.
Zależy mi jednak na opanowaniu frameworku, który jest publicznie znany. O ile opanuję symfony i zacznę w miarę swobodnie tworzyć w nim aplikacje pewnie kolejnym krokiem będzie kolejny framework.

Mam jeszcze pytanko apropos tych klas modelu.
Mam stworzoną tabelę w bazie SessionInfo (pomijając fakt, ze jest obsługa sesji już w Symfony). Posiada ona kilka kolumn (session_id, session_identifier, session_string, session_date, session_ip).
Generator stworzył mi pliki (między innymi jest SessionInfo.php w katalogu /lib/model
W nim mam klasę SessionInfo. Plik wygląda tak:

<?php

/**
* Subclass for representing a row from the 'session_info' table.
*
*
*
* @package lib.model
*/
class SessionInfo extends BaseSessionInfo
{
public static function DB_initializeSession(){

/*
$pSessionCriteria = new Criteria();
$pSessionCriteria->add(SessionInfoPeer::SESSION_IDENTIFIER, session_id());

$pSessionInfo = SessionInfoPeer::doSelect($pSessionCriteria);

// tu jest problem
$pSessionInfo->getSessionString();
//Fatal error: Call to a member function getSessionString() on a non-object in

if(count($pSessionInfo) == 0){
$pNewSessionInfo = new SessionInfo();
$pNewSessionInfo->setSessionIdentifier(session_id());
$pNewSessionInfo->setSessionDate(date("Y-m-d H:i:s"));
$pNewSessionInfo->setSessionIp($_SERVER['REMOTE_ADDR']);
$pNewSessionInfo->setSessionString(DEFAULT_LANGUAGE);
$pNewSessionInfo->save();
}
}
*/
}

Aktualnie metoda DB_initializeSession jest wywołana w jednym z komponentów na stronie głównej: SessionInfo::DB_initializeSession();
Zadaniem tej metody jest sprawdzenie, czy istnieje taki identyfikator sesji w bazie danych. Jeżeli tak, to odczytaj jakieś informacje o nim, jeżeli nie stwórz nowy identyfikator sesji i zapisz go w bazie danych.
To co jest zaremowane dopisane jest przeze mnie. Jak odremuję wszystko działa ładnie, ale mam problem z odczytaniem wartości identyfikatora sesji. Co jest nie tak i jak powinienem to zrobić?
Chciał bym stworzyć sobie jeszcze wiele róznych metod do obsługi tej tabeli, czy innych, które będą wywołane z dowolnej akcji w aplikacji.
Dzięki
Rafał
Go to the top of the page
+Quote Post
destroyerr
post 5.02.2008, 19:44:42
Post #12





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


No to w ilu postach trzeba Ci napisać, żebyś przeczytał dokumentację?? Zobacz lepiej co zwraca funkcja SessionInfoPeer::doSelect().
Gdybyś czytał dokumentację pewnie dowiedziałbyś się, że fukcja DB_initializeSession() powinna się raczej znaleźć w klasie SessionInfoPeer.

To co chcesz uzyskać lepiej wykonać za pomocą filtrów, o tym zresztą też już pisałem.
Go to the top of the page
+Quote Post
rsobczuk
post 7.02.2008, 16:04:40
Post #13





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Witam ponownie...
przebrnąłem przez większość problemów narazie, ale napotkałem kolejny.
W klasie modelu chcę wykonać doUpdate jednego rekordu i stworzyłem sobie coś takiego:

private static function DB_setSessionStringElements($aElementsArray){

$pString = 'Hello world';

$aaa = new Criteria();
$aaa->add(self::SESSION_IDENTIFIER, session_id());

$pUpdateCriteria = new Criteria();
$pUpdateCriteria->add(self::SESSION_STRING, $pString);

$connection = Propel::getConnection();
SessionInfoPeer::doUpdate($aaa, $pUpdateCriteria, $connection);

}

Dostałem coś takiego :
Fatal error: Argument 3 passed to BasePeer::doUpdate() must implement interface Connection, called in ................

Przeszukałem kilka stron w necie, w dokumentacji niewiele jest napisane na temat doUpdate. Czemu jest problem z połączeniem?

Dzięki
Rafał
Go to the top of the page
+Quote Post
Cysiaczek
post 7.02.2008, 16:13:31
Post #14





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Zobacz, co zwraca metoda getConnection(), bo powinna obiekt PDO.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
rsobczuk
post 7.02.2008, 16:19:14
Post #15





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


No wlasnie cos zwraca.. cos takiego konkretnie:
sfDebugConnection Object ( [childConnection:private] => MySQLConnection Object ( [database:private] => www_sobczuk_eu [transactionOpcount:protected] => 0 [dblink:protected] => Resource id #133 [dsn:protected] => Array ( [database] => www_sobczuk_eu [encoding] => [hostspec] => localhost [password] => xxxxxxxx [persistent] => [phptype] => mysql [port] => [protocol] => [socket] => [username] => user_www ) [flags:protected] => 0 [lastQuery] => SELECT session_info.SESSION_ID, session_info.SESSION_IDENTIFIER, session_info.SESSION_STRING, session_info.SESSION_DATE, session_info.SESSION_IP FROM session_info WHERE session_info.SESSION_IDENTIFIER='ujpffd491mhl6fap5gdjd1c5a1' LIMIT 1 ) [numQueriesExecuted:private] => 1 [lastExecutedQuery:private] => SELECT session_info.SESSION_ID, session_info.SESSION_IDENTIFIER, session_info.SESSION_STRING, session_info.SESSION_DATE, session_info.SESSION_IP FROM session_info WHERE session_info.SESSION_IDENTIFIER='ujpffd491mhl6fap5gdjd1c5a1' LIMIT 1 )
Go to the top of the page
+Quote Post
Cysiaczek
post 7.02.2008, 16:23:43
Post #16





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Aaaaa to to jest Syfony ;p A to nie wiem snitch.gif Co poszło nie tak, bo to jest debug object. Sprawdź dokumentację symfony.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
rsobczuk
post 7.02.2008, 16:26:08
Post #17





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


No wlasnie doSelect wykonuje sie bez zadnego problemu, czyli polaczenie do bazy mam!!!

Ten post edytował rsobczuk 7.02.2008, 16:26:44
Go to the top of the page
+Quote Post
destroyerr
post 7.02.2008, 16:28:02
Post #18





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


@Cysiaczek: ta metoda nie powinna zwracać obiektu PDO ponieważ symfony 1.0.x ma starego Propela.

@rsobczuk: jeżeli chcesz uzyskać połączenie propela to metode getConnection() musisz wywołać z parametrem, który jest nazwą tego połączenia, które chcesz uzyskać (standardowo: propel). Jednak metody doUpdate nie wymagają 3 parametru, czyli połączenia. No chyba, że istnieje u Ciebie taka potrzeba.
Go to the top of the page
+Quote Post
rsobczuk
post 7.02.2008, 16:37:55
Post #19





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 20.10.2002
Skąd: Kraków

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


Jeżeli wyrzuciłem 3ci parametr, to jest dokładnie to samo. Chcę, żeby używane było dokładnie to samo połączenie, które jest używane do selectów...
Go to the top of the page
+Quote Post
Cysiaczek
post 7.02.2008, 16:42:13
Post #20





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




daj getConnection(null).
W Propelu jest moim zdaniem błąd (choć devy mówią, że jest ok). Polaga na tym, że jeśli nie podasz nazwy bazy danych, lub podana nazwa nie istnieje (nie ma bazy), to są zgłaszane wyjątki. Plik schema.xml ...
  1. <database name="nazwa" />


Jeśli nie podasz nazwy bazy danych automatycznie zostanie wygenerowany pusty string, który powoduje błędy (bo takiej bazy przecież nie ma!). Teraz zauważ, że masz w propelu tzw blok default, który zawiera dane do domyślnego połaczenia z bazą. Jest on wywoływany tylko, gdy nazwa bazy danych ma wartość NULL. Przeszukaj pliki pod kątem nazwy Twojej bazy danych i zamień jej na NULL (2 zmiany na model, o ile się nie mylę)
Wiem, że to trochę zamotane, ale jeśli zmeniałeś nazwę bazy danych (np przy przenosinach na inny serwer), to może to Ci pomoże

Pozdrawiam.

p.s zawsze możesz wygenerować nowy model z nową nazwą bazy danych.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 24.07.2025 - 15:44