Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF][Symfony2][Symfony]Helpery w Symfony2
soszin
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 26.10.2012
Skąd: Kraków

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


Cześć,

Zwracam sie do Was z prośbą o nakierowanie gdzie umieszczac helpery których chce uzywać w calym projekcie.
Tworze własny system CMS. Kazdą funkcjonalność jest osobnym Bundlem, np. News, Gallery, Article itp.

W helperach chce umieszczac funkcje np. do tworzenia cleanURL.

Myslalem utworzyć HelperBundle gdzie utworzyłbym katalog Helper i tworzył różne klasy np. HTML i umieszczał helpery to trimowania, usuwania znaków html itp.
TEXT - do pracy na stringach , URL do pracy na adresach URL itd.

Potem utworzyć serwisy i uzywać dowolnym miejscu/

Czy ten sposób jest ok? jak to lepiej rozwiązac? jak Wy to robicie?

Drugie pytanie:
Jak uzyskać dostep do servisu w __construktor()

Dostaje bład:
Call to a member function get() on a non-object in /var/www/apps/lovecoding_cms/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php

Jeśli chce uzyc serwisu w ponizszy sposob

Kod
    public function __construct()
    {
        $breadcrumbs = $this->get("white_october_breadcrumbs");
    }


Próbowałem również:

Kod
    use Symfony\Component\DependencyInjection\ContainerInterface;

    public function __construct(ContainerInterface $container)
    {
        $this->_container = $container;
        $breadcrumbs = $this->_container->get("white_october_breadcrumbs");
    }


Teraz otrzymuje:
Catchable Fatal Error: Argument 1 passed to Lovecoding\AdminBundle\Controller\MainController::__construct() must implement interface Symfony\Component\DependencyInjection\ContainerInterface, none given, called in /var/www/apps/lovecoding_cms/app/cache/dev/classes.php on line 2393 and defined in /var/www/apps/lovecoding_cms/src/Lovecoding/AdminBundle/Controller/MainController.php line 17


Moj controller dziedziczy po Controller

Kod
class MainController extends Controller {



Czekam na odpowiedzi.
Pozdrawiam.

Ten post edytował soszin 3.09.2014, 23:05:53
Go to the top of the page
+Quote Post
MLukasz
post
Post #2





Grupa: Zarejestrowani
Postów: 21
Pomógł: 2
Dołączył: 18.11.2009

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


Hej,
Odnośnie pierwszego pytania, ja zawsze tworzę sobie bundla o nazwie w rodzaju MainBundle, w którym trzymam rzeczy, które mogą być potrzebne w całym projekcie - nie tylko helpery.
Co do drugiego pytania. Czemu nie możesz pobierać odpowiednich serwisów w momencie kiedy są już potrzebne? Jeśli koniecznie chcesz je wstrzykiwać to tutaj masz rozwiązanie: http://symfony.com/doc/current/cookbook/co...er/service.html, możesz też użyć bundla JmsDiExtra: http://jmsyst.com/bundles/JMSDiExtraBundle...age#controllers
Go to the top of the page
+Quote Post
soszin
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 26.10.2012
Skąd: Kraków

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


Za pierwszą odpowiedz dzięki,
w głownym kontrolerze chce utworzyc pierwszy element breadcrumba na Home, i aby wszystkie kontrolery które po nim dziedziczą mialy go domyślnie. Nie chce w kazdym kontrolerze usawiać elementu Home,
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Kontener jest wstrzykiwany poprzez metodę setContainer nie konstruktor kontrolera.
2. Przecież dodanie "Home'a" możesz zrobić w momencie tworzenia samej usługi odpowiedzialnej za breadcrumbs'y.

---

"Helpery" to bardzo, bardzo ogólna nazwa. Część zrealizujesz sobie zapewne przez zwykłe klasy, a część przez usługi (w kontekście DIC-a). Część z nich może być na tyle mocno związana z projektem, że nie będzie sensu wrzucać ich nigdzie indziej jak do jakiegoś bundle'a, część będzie kompletnie niezależna i można pomyśleć o wydzieleniu ich do zupełnie osobnego projektu. Co, gdzie, jak, kiedy? To już zależy od tego co to konkretnie jest.

Ten post edytował Crozin 4.09.2014, 12:40:30
Go to the top of the page
+Quote Post
ohm
post
Post #5





Grupa: Zarejestrowani
Postów: 623
Pomógł: 144
Dołączył: 22.12.2010

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


Do konstruktora (lub przez setter) w serwisie możesz wstrzykiwać bez problemu także inne serwisy przez services.yml czy .xml, zależy czego uzywasz.

Tu masz praktycznie wszystko wyjaśnione: http://symfony.com/doc/current/book/servic...ecting-services no i ogólnie polecam całość strony do przejrzenia.

Ten post edytował ohm 4.09.2014, 20:33:18
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 16:23