Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][Symfony2][Symfony]Helpery w Symfony2
Forum PHP.pl > Forum > PHP > Frameworki
soszin
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.
MLukasz
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
soszin
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,
Crozin
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.
ohm
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.
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.