2

我无法理解 Symfony 2 的一个关键概念。

我正在一个网站上工作,用户可以在该网站上创建内容,然后可以使用秘密网址将其发送给其他人。类似于 www.yoursite.com/{secret-identifier-string}。

我计划这样做如下:

  • 持久化用户的内容。
  • 使用双向加密方法(如mcrypt_encrypt)创建包含内容 id 和创建时间戳(或任何其他永远不会再次更改的内容,作为额外的安全功能)的标识符字符串。
  • 创建链接并将其显示给用户以将其赠送
  • 每当调用 url 时,标识符字符串都会被解密。如果提供的时间戳与内容 id 行的相应值匹配,则会显示该页面。

我的问题是:

  • 一般来说,您认为这是一个好的程序吗?
  • 在 Symfony2 之外,我会创建像getIdentifierString()和这样的辅助方法getContentPageLink()。Symfony2中对应的代码应该放在哪里?它是否属于实体类?如果是这样,我会遇到问题,因为我正在使用服务类进行加密。该服务仅在控制器中可用。

非常感谢!

4

2 回答 2

1

一般的想法是您创建“辅助类”而不是“辅助函数”。这些类可能依赖于其他类,在这种情况下,您将它们定义为服务。

听起来您的方法确实具有依赖关系(关于加密),因此您可以创建一个负责生成链接的新服务。在它的构造函数中,它将采用加密器,并且方法将传递给实体以生成链接/字符串。

例如,您的服务:

<service id="app_core.linkifier" class="App\CoreBundle\Linkifier">
    <argument type="service" id="the.id.for.encryptor"/>
</service>

和类:

class Linkifier
{
    private $encryptor;

    public function __construct(Encryptor $encryptor)
    {
        $this->encryptor = $encryptor;
    }

    public function generateContentPageLink(Entity $the_entity)
    {
        return $this->encryptor->encrypt($the_entity);
    }
}
于 2012-06-24T17:29:05.277 回答
1

充分尊重 DI 和面向服务的设计、命名空间以及我们从中受益的所有好东西,

我仍然拒绝打字或阅读:

$this->mysyperfancyservice->dowhatevertheseviceissupposedtodowith($the_entity);

哪里有一个简单的

do($the_entity);

是我项目中 150 个实例所需要的全部内容,do参与该项目的每个人都知道哪些内容。

这就是 helper 的意义所在——可读性和简单性。只要它不依赖于其他服务。

我的解决方案是基本的 Composer 功能: "autoload": { ... "files": [ "src/helper/functions.php" ] }

我将数量非常有限的非常有用的函数放在src/helper/functions.php文件中,然后像这样将其添加到项目中。

为了使该功能在项目范围内可用,需要运行: composer dump-autoload

于 2018-08-24T14:12:18.637 回答