Php 在Zend framework 2中的电子邮件中创建超链接

Php 在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

我在Zend Framework 2中使用MVC架构开发了一个应用程序

我有一封发送给管理员的电子邮件,现在需要附加一个包含basepath的超链接

我的所有业务逻辑都在服务层中处理,而服务层不使用viewhelper


有什么建议的解决方案吗?

听起来您应该将控制器的依赖项注入到服务对象中。像那样向后工作不是好的做法。既然您提到要利用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()?