Moduł PnReadConfig zawiera Plugin przygotowany specjalnie dla Controller. Po instalacji w naszym projekcie, będziemy mogli z niego korzystać we wszystkich modułach. Tworzenie prostego modułu przedstawiliśmy w artykule „Tworzenie modułu HelloWorld w Zend Framework 3”, dlatego pominiemy ten temat. Podstawy dotyczące Zend Framework 3 znajdziemy w dokumentacji i książce Zend Framework 3. Poradnik programisty.
Przykładową tablicę, z której będziemy korzystać o nazwie pn_cms należy dodać do głównego katalogu projektu config/autoload/cms.global.php (Listing 1.). Dzięki dodaniu własnego przedrostka przed nazwą cms, mamy pewność, że nie pojawi się w projekcie druga tablica asocjacyjna o takiej samej nazwie. Rozmieszczenie wszystkich plików w artykule zaprezentowano na rysunku 1.
Listing 1. Własna konfiguracja w pliku config/autoload/cms.global.php
...
/**
* Informacje ogólne o CMS
* Języki danych w CMS
* Zend Framework 3 kurs
*/
return [
'pn_cms' => [
'language' => [
'pl' => 'pl_PL',
'en' => 'en_US',
],
'page_type' => [],
'role' => [
'admin' => 'Admin',
'publisher' => 'Publisher',
'writer' => 'Writer',
'guest' => 'Guest',
'locked' => 'Locked'
],
],
];
Rys. 1. Układ plików użytych w przykładzie Zend Framework 3
Moduł zawiera cztery pliki (rys. 1.):
- config/module.config.php (Listing 2.)
- src/Controller/Plugin/ReadConfigPlugin.php (Listing 3.)
- src/Factory/Controller/Plugin/ReadConfigPluginFactory.php (Listing 4.)
- src/Module.php (Listing 5.)
Controller Plugin pod jaką nazwą ma być dostępny w Controller ustawiamy w pliku module.config.php (Listing 2.).
Listing 2. Zawartość pliku config/module.config.php
...
// Zend Framework 3 kurs
namespace PnReadConfig;
return [
'controller_plugins' => [
'factories' => [
'readConfig' => \PnReadConfig\Factory\Controller\Plugin\ReadConfigPluginFactory::class,
],
],
];
Listing 3. Zawartość pliku src/Controller/Plugin/ReadConfigPlugin.php
...
// Zend Framework 3 kurs
namespace PnReadConfig\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
class ReadConfigPlugin extends AbstractPlugin {
/**
* @var array
*/
private $config;
public function __construct(array $config) {
$this->config = $config;
}
// Pobiera całą konfigurację
public function all() {
return $this->config;
}
// Pobiera tylko zawartość pliku cms.global.php
public function cms() {
return $this->config["pn_cms"];
}
}
Listing 4. Zawartość pliku src/Factory/Controller/Plugin/ReadConfigPluginFactory.php
...
// Zend Framework 3 kurs
namespace PnReadConfig\Factory\Controller\Plugin;
use Interop\Container\ContainerInterface;
use Zend\ServiceManager\Factory\FactoryInterface;
class ReadConfigPluginFactory implements FactoryInterface {
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
// Pobiera całą konfigurację
$config = $container->get('Config');
return new \PnReadConfig\Controller\Plugin\ReadConfigPlugin($config);
}
}
Listing 5. Zawartość pliku src/Module.php
...
// Zend Framework 3 kurs
namespace PnReadConfig;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
class Module implements ConfigProviderInterface {
public function getConfig()
{
return include __DIR__ . '/../config/module.config.php';
}
}
Przykład użycia modułu PnReadConfig zaprezentowano na listingu 6, wynik działania przedstawiono na rysunku 2.
Listing 6. Fragment pliku indexController.php
// Zend Framework 3 kurs
// Przekaże całą konfigurację
// var_dump($this->readConfig()->all());
// Przekaże tylko fragment konfiguracji
// zapisanej w tablicy asocjacyjnej pn_cms (rys. 2.)
var_dump($this->readConfig()->cms());
Rys. 2. Zend Framework 3 Controller Plugin przykład
Zaprezentowany moduł w artykule znajdziemy w pliku controller-plugin-module-zf3.zip – kodowanie plików tekstowych UTF-8, znaki końca linii Unix. Moduł PnReadConfig został utworzony w środowisku programistycznym Eclipse PDT.
Wybrane książki:
- Adam Omelak: Zend Framework 3. Poradnik programisty, Wydawnictwo Helion, 2017
Wybrane strony: