Создайте сервис, но не используйте закрытие. Закрытие не кэшируется.
module.config.PHP
use Application\Service\SeoService;
use Application\Factory\Service\SeoService;
//...
'service_manager' => [
'factories' => [
SeoService::class => SeoServiceFactory::class,
],
],
Затем написать SeoService завод и ваш класс SeoService:
завод
namespace Application\Factory\Service;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Application\Service\SeoService;
class SeoServiceFactory implements FactoryInterface {
public function createService(ServiceLocatorInterface $serviceLocator)
{
$service = new SeoService(/* dependencies */);
return $service;
}
}
Затем написать сервис
Услуги
namespace Application\Service\SeoService;
class SeoService
{
public function __construct(/* dependencies */){
}
public function convertString($url){
// do your thing here
}
}
Итак, в контроллерах, вы будете просто:
use Application\Service\SeoService;
$seo = $this->getServiceLocator()->get(SeoService::class);
$seo->convertString(...);
удачи.
Как насчет использования плагина контроллера в модели? –
Плагины контроллера хороши только для контроллера, следовательно, именование :) Я не в пользу слишком много логики в моделях данных, но если вам нужно, один из способов будет встраивать такую функциональность как часть вашей абстракции. – Ali
Так что, на мой взгляд, лучший способ - использовать Черты. –