Php 在Zend framework 2中的电子邮件中创建超链接
我在Zend Framework 2中使用MVC架构开发了一个应用程序 我有一封发送给管理员的电子邮件,现在需要附加一个包含basepath的超链接 我的所有业务逻辑都在服务层中处理,而服务层不使用viewhelperPhp 在Zend framework 2中的电子邮件中创建超链接,php,zend-framework,model-view-controller,zend-framework2,Php,Zend Framework,Model View Controller,Zend Framework2,我在Zend Framework 2中使用MVC架构开发了一个应用程序 我有一封发送给管理员的电子邮件,现在需要附加一个包含basepath的超链接 我的所有业务逻辑都在服务层中处理,而服务层不使用viewhelper 有什么建议的解决方案吗?听起来您应该将控制器的依赖项注入到服务对象中。像那样向后工作不是好的做法。既然您提到要利用MVC,我想这是一个控制器操作,而不是CLI命令?这样做: 控制器 use \Application\Service\Bar; public function fo
有什么建议的解决方案吗?听起来您应该将控制器的依赖项注入到服务对象中。像那样向后工作不是好的做法。既然您提到要利用MVC,我想这是一个控制器操作,而不是CLI命令?这样做: 控制器
use \Application\Service\Bar;
public function fooAction(){
$bar_with_basepath = $this->getServiceLocator()->get( Bar::class, ['basepath' => $this->basePath() ] );
$bar_with_basepath->execute();
}
接下来,将您的服务链接到工厂
配置
use \Application\Service\Bar;
use \Application\Factory\Service\BarFactory;
...
'service_manager' => [
'factories' => [
Bar::class => BarFactory::class,
],
],
然后,定义工厂代码以包含可变CreationOptions
工厂
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\MutableCreationOptionsInterface;
class BarFactory implements FactoryInterface, MutableCreationOptionsInterface{
protected $options;
public function setCreationOptions( array $options )
{
$this->options = $options;
}
/**
* {@inheritdoc}
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{
$serviceManager = $serviceLocator->getServiceLocator();
$bar = new Bar( $this->options['basepath'] );
return $bar;
}
}
现在,您可以保证基本路径将被传递给您的酒吧服务的构造函数
class Bar {
public $basepath;
public function __construct( $basepath ){
$this->basepath = $basepath;
}
public function execute(){
// do something with the basepath
}
}
您将需要处理从工厂将任何其他依赖项添加到您的服务中(上图)。例如,设置服务定位器等(现在使用ServiceLocator很容易)
始终注入您的依赖项,不要尝试对它们进行反向工程:)因此,这不是寻求架构/技术设计想法的正确地方。在这里发布问题最有价值的是当你提出实际的解决方案,而这些解决方案确实让你头疼。谢谢你的回复。我要求ho从服务层中获取$this->basepath()?