Wpis z mikrobloga

Takie pytanie koncepcyjne #zendframework 2

Mam, załóżmy, dwa moduły - "Application" (frontend) i "Cms" (backend). Załóżmy, że jest jakaś informacja (nazwijmy ją Request), którą tworzy klient, a następnie przetwarza administrator serwisu. W sumie normalna, codzienna sytuacja.

Powiedzmy, że klient może tworzy taki obiekt Request, a administrator listuje wszystkie obiekty Request, jakie w systemie istnieją.

Do obsługi powyższego utworzyłem sobie klasy

\Application\Model\Request
i

\Application\Model\Table\RequestTable
. Problem w tym, że te klasy tak naprawdę nie są częścią tego modułu. Co prawda nic nie stoi na przeszkodzie, żeby je tak używać, ale brak elegancji mnie irytuje.

Pytanie: gdzie umieścić takie klasy, które są używane przez wszystkie moduły? Domyślna struktura katalogów niczego nie sugeruje.

#php #zf2
  • 6
@Micki: vendor to dla mnie miejsce na kod 3rdparty.

Ale tak sobie pomyślałem (nie ma to jak zdefiniować problem na piśmie) - w mózgu mam silnie związaną strukturę katalogów z routingiem. To jest zazwyczaj dobre, ale przecież mogę mieć moduły bez kontrolerów - zawierające encje, klasy dostępu do danych itp.

W ten sposób mam zamiar to rozwiązać.
@singollo: Nie pamiętam jak się nazywała ta strona, która ładnie formatowała kod na wykopie ale mniejsza z tym.

Nie wiem dokładnie z czym masz problem.

W module Cms możesz przecież dać:

use Application\Model\Request

i później

$request = new Request(); // albo new \Application\Model\Request();

Ewentualnie użyć SerivceManagera

'service_manager' => array(

'invokables' => array(

'RequestClass' => 'Application\Model\Request',

)

),

I później w dowolnym module:

$request = $serviceLocator->get('RequestClass');
@Nieinterere: mogę, oczywiście. Ale klasa Request jest tak samo częścią Application, jak Cms - albo w takim samym stopniu nie jest częścią ani jednej ani drugiej. W jednym module będzie używana tylko RequestTable::create(), a w drugim RequestTable::getList(). Dwa obiekty RequestTable to za dużo, a trzymanie w namespace nie używanych metod to nadmiar..

Dlatego, jak pisałem, drażnił mnie brak elegancji
@singollo: Ja zawsze robię sobie dodatkowy katalog library w nim podkatalog o nazwie związanej z tym co projekt np. MyLibrary. Rejestruję tę przestrzeń nazw i jak coś nie należy ani do jednego modułu ani do drugiego to umieszczam to właśnie tam i później:

new \MyLibrary\Model\Request()

Pozwala to zachować pewną separacje i przejrzystość. Wiem że w module znajdują się tylko pliki bezpośrednio powiązane z modułem.