Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Lista nazw dla DI
Forum PHP.pl > Forum > PHP > Frameworki
adbacz
Potrzebuję listę nazw, które można wykożystać do DI w Symfony2. Nie wiecie gdzie można takową znaleźć?

Chodzi mi o pobranie instancji klasy poprzez $this->get('class');.
Crozin
Możesz jakoś rozwinąć bo to co napisałeś... nie ma zbyt dużego sensu. Czyżby chodziło Ci o listę wszystkich dostępnych w danym czasie usług w DIC-u? Symfony\Component\DependencyInjection\Container::getServiceIds().
destroyerr
Lub komenda container:debug
adbacz
Tak, dokładnie o to - dziękuję. Po prostu nie wiedziałem jak to napisać.

Kurcze, nie chce tworzyć nowego wątku i pośrednio ten wątek założyłem aby samemu odszukac informacje ale nie znalazłem tego co chciałęm. Może mi ktoś powiedzieć czy jest możliwość w SF2 sprawdzenia, czy dany adres istnieje? Po prostu chciałbym w danym momencie w kodzie sprawdzać czy adres istnieje i robić "coś" innego niż to co się dzieje normalnie (E404).

EDIT:
Znalazłem coś w tej klasie, ale nie wiem czy to jest do tego i dlatego chciałem się dowiedzieć jak się do niej dostać poprzed DIC:
Symfony\Component\Routing\Matcher\UrlMatcher::match()
Crozin
Chodzi o to, że przykładowo otrzymujesz skądś jakiś adres URL, przykładowo http://example.org/path/123/some-title.html i chciałbyś sprawdzić czy jest to poprawny adres w obrębie Twojej strony?
Teraz pytanie czy to ma sprawdzać czy to jest poprawny format, tj. czy na stronie jest zdefiniowana jakaś tam reguła routingu /path/{ID}/{TITLE}.html czy może czy jest to i poprawny format i faktycznie istniejąca podstrona?
adbacz
Załóżmy, że to strona na którą ktoś jest przekierowywany z mojej strony (powiedzmy po zalogowaniu się): http://example.org/article/title-123 i ta strona jest w moim projekcie (?). Jak sprawdzić czy ścieżka (/article/{name}-{id}) istnieje? W sensie, żeby nie pokazywało mi domyślnie błędu 404. Mam nadzieje, że dobrze się wyraziłem.

Nie chodzi o format (.html), ani o to czy, jak w tym przypadku, artykuł na takiej stronie istnieje, po prostu czy jest to ścieżka odpowiadająca zdefiniowanemu routingowi w SF.
Crozin
No to w takim razie $container->get('router')->match('URL'); powinno załatwić sprawę. Metoda match() Routera wewnętrznie korzysta z wspomnianego przez Ciebie Symfony\Component\Routing\Matcher\UrlMatcher::match() .
adbacz
Dzięki Ci wielkie Crozin, o to mi właśnie chodziło. Teraz tylko zastanawiam się, co zrobić, żeby nie pokazywało błędu, gdy route nie istnieje ;/

Kurde, jak nie jeden problem to następny. Przesyłając do tej metody ścieżkę / zwraca mi ładnie tablicę z kontrollerem i route-m, ale jak podam coś, co nie istnieje dostaję błąd 500 i żadnego powiadomienia z tegoż ResourceNotFoundException, które jest wysyłane jako E500. Można coś z tym zrobić? Jakoś wygłuszyć to, żeby zwróciło jakąś inną wiadomość niż exception? Mógłbym dopisać tam do tej metody coś, ale nie chcę grzebać w oryginalnych plikach, wolę poszukać jakiegoś rozwiązania.
Crozin
Po prostu sprawdź jakie wyjątki rzuca metoda match() i przechwyć je.
  1. $success = null;
  2.  
  3. try {
  4. $...->match($url);
  5. $success = true;
  6. } catch (ResourceNotFoundException $e) {
  7. $success = false;
  8. }
adbacz
Tak się składa, że ta funkcja nie ma bloku try() catch() a takie cosik:
  1. throw 0 < count($this->allow)
  2. ? new MethodNotAllowedException(array_unique(array_map('strtoupper', $this->allow)))
  3. : new ResourceNotFoundException();

Ale coś pomyślę nad tym. Dziękuję za wszelką pomoc Crozin.
ano
ARGH no to właśnie oznacza, że ta metoda może wyrzucić albo ten albo ten wyjątek.
dlatego umieść ją w
  1. try {
  2. ->match(...);
  3. }
  4. catch(\Exception $e) {
  5.  
  6. }

i będzie działało...
Crozin
@ano: Powinieneś łapać jedynie dwa wyjątki wspomniane w dokumentacji, tj. MethodNotAllowedException oraz ResourceNotFoundException. Łapianie wszystkich wyjątków jest tutaj błędem.
adbacz
Przepraszam, źle zrozumiałem Crozina ;/ Zrozumiałem, że w tej metodzie mam zmienić a nie objąć już wywołanie tej metody blokiem. Mój błąd.
ano
Cytat(Crozin @ 6.02.2012, 23:46:41 ) *
@ano: Powinieneś łapać jedynie dwa wyjątki wspomniane w dokumentacji, tj. MethodNotAllowedException oraz ResourceNotFoundException. Łapianie wszystkich wyjątków jest tutaj błędem.


Crozin, nie patrzylem do dokumentacji więc nie mam pojęcia jakie wyjątki może wyrzucić ta metoda. Jednak założyłem, że wszystkie dziedziczą po \Exception, więc dla bezpieczeństwa adbacza tak właśnie napisałem.
adbacz
Dla bezpieczeństwa? Możesz to rozwinąć? O co Ci chodzi dokładnie ano?
Crozin
Rozumiem, że mogłeś nie patrzeć do dokumentacji na potrzebny tego postu, ale w normalnym kodzie pod żadnym pozorem tego \Exception nie powinno tam być. Jedynie dwa wspomniane wcześniej wyjątki oznaczają nieistnienie reguły routingu, a co jeśli pojawił by się jakiś inny wyjątek?
Czym mógłby być spowodowany taki nieprzewidziany wyjątek? Mógłby on zostać wyrzucony przez nasz własną implementację UrlMatchera, która mogłaby korzystać przykładowo z bazy danych i na skutek zerwania połączenia wyrzucić wyjątek. Pojawienie się takiego wyjątku powinno skutkować wywaleniem całej aplikacji (w takiej sytuacji raczej nie wiele dałoby się zrobić), jednak w przypadku kodu podanego przez Ciebie zostanie to błędnie zinterpretowane jako nieistnienie danej reguły - co jest oczywiście błędne.

Dlatego też właśnie dla bezpieczeństwa nie powinno być tam \Exception.

Swoją drogą tutaj ewidentnie język sam w sobie daje ciała nie wprowadzając mechanizmu wymuszającego obsłużenie wyjątków (pomijając wyjątki czasu działania - ang. runtime).
ano
crozin, doskonale to rozumiem. Napisałem tam \Exception, tylko dlatego, że @adbacz napisał ten o to post:
Cytat(adbacz @ 6.02.2012, 23:25:50 ) *
Tak się składa, że ta funkcja nie ma bloku try() catch() a takie cosik:
  1. throw 0 < count($this->allow)
  2. ? new MethodNotAllowedException(array_unique(array_map('strtoupper', $this->allow)))
  3. : new ResourceNotFoundException();

Ale coś pomyślę nad tym. Dziękuję za wszelką pomoc Crozin.

który mnie przeraził, więc nie sądziłem, że warto JESZCZE wchodzić w szczegóły wyjątków... wink.gif
adbacz
Cytat
który mnie przeraził, więc nie sądziłem, że warto JESZCZE wchodzić w szczegóły wyjątków...

Oj tam, oj tam. Po prostu czytanie ze zrozumieniem troszkę u mnie kuleje ostatnio - źle przeczytałem i zrozumiałem pos Crozina. Koniec OffTopu. Dziękuję za pomoc Panowie.
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.