• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Widoczność serwisów zapisanych w rejestr Service Manager'a za pomocą konfiguracji modułu

Object Storage Arubacloud
0 głosów
78 wizyt
pytanie zadane 20 marca 2020 w PHP przez ProfesorPerry Nowicjusz (140 p.)

Witajcie, potrzebowałbym pomocy kogoś, kto dobrze zna wzorce projektowe (głównie Dependency Injection) oraz framework Laminas (wcześniej Zend Framework)

Laminas zawiera ciekawy komponent o nazwie Service Manager. Oparty jest on o wzorzec projektowy dependency-injection ( w sumie też w dużej części o wzorzec factory )

Do rzeczy: jak wiemy, w Zendzie cała aplikacja dzieli się na moduły (zapisywane w ścieżce /modules). Każdy taki moduł posiada plik Module.php, do którego można zaimportować lub bezpośrednio w nim zapisać konfigurację tego modułu. Jedną z możliwych do konfiguracji rzeczy są właśnie serwisy, które są obsługiwane przez Service Manager. 

Problem polega na tym, że serwisy przekazane w tej konfiguracji nie są widoczne w pozostałych komponentach modułu, więc na przykład przykładowy plik Module.php :

<?php

namespace App;

class Module 
{
	public function getConfig()
	{
		return include '../config/module.config.php';
	}
	
	public function getServiceConfig() 
	{
		return [
			'factories' => [
				'AppTableGateway' => function(ServiceManager $sm) {
					$tableName = 'app';
					$dbAdapter = new \Laminas\Db\Adapter\Adapter([
						'driver' => 'Pdo',
						'database' => 'app',
						'username' => 'root',
						'password' => '123456',
						'hostname' => 'localhost',
					]);
					
					return new TableGateway($tableName, $dbAdapter);
				}
			]
		];
	}
}

Skonfigurowałem sobie tutaj serwis 'AppTableGateway'. Nie mogę jednak dostać się do tego serwisu w innym miejscu modułu (np. App\Utilities\Database) za pomocą:

<?php

namespace App\Utilities\Database;

class Database
{
    public function __construct() 
    {
        $serviceManager = new ServiceManager();
        $appTableGateway = $serviceManager->get('AppTableGateway'); // nie pobiera         
        
        // Dalszy ciąg klasy / kodu
    }
}

Z tego co czytałem Service Manager to komponent, który powinien przechowywać rejestr serwisów i w każdej chwili można się do tego rejestru dostać - po czym wyciągnąć co się wcześniej skonfigurowało.

Czy jest jakiś sposób na obsługę ServiceManager'a, który pozwoli na trwałość zapisanych serwisów podczas konfiguracji?

komentarz 21 marca 2020 przez Ehlert Ekspert (212,670 p.)
Tak z ciekawości... Wybrałeś ten framework sam, czy to kwestia zawodowa?
komentarz 21 marca 2020 przez ProfesorPerry Nowicjusz (140 p.)
W sumie to zacząłem jeden ze swoich głównych projektów w Zend framework

Wybór był dosyć nieświadomy, bo gdzieś usłyszałem o zendzie więc postanowiłem go użyć

Dzisiaj głównie używam laravela, jednak zend/laminas ma fajną koncepcję dzielenia aplikacji na moduły

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 276 wizyt
pytanie zadane 20 sierpnia 2017 w Inne języki przez niezalogowany
0 głosów
0 odpowiedzi 117 wizyt
0 głosów
1 odpowiedź 188 wizyt
pytanie zadane 4 czerwca 2021 w PHP przez CSSoup Mądrala (6,460 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...