我无法理解Symfony 2的关键概念。
我正在一个网站上工作,用户可以使用秘密网址创建内容然后发送给其他人。比如www.yoursite.com/{secret-identifier-string}。
我计划如下:
mcrypt_encrypt
)创建包含内容ID和创建时间戳(或任何其他永远不会再次更改的内容作为额外安全功能的内容)的标识符字符串。我的问题是:
getIdentifierString()
和getContentPageLink()
。我在哪里将相应的代码放在Symfony2中?它属于实体类吗?如果是这样,我遇到了问题,因为我正在使用服务类进行加密。该服务仅在控制器中可用。非常感谢!
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
在充分考虑到DI和面向服务的设计,命名空间以及我们从中受益的所有好处之后,
我仍然拒绝输入或阅读:
$this->mysyperfancyservice->dowhatevertheseviceissupposedtodowith($the_entity);
简单的
do($the_entity);
我需要在整个项目中的150个实例上使用,其中do
是每个从事该项目的人都应该知道的东西。
这就是帮助程序的意思-可读性和简单性。只要不依赖其他服务即可。
我的解决方案是在Composer的基本功能中:
"autoload": {
...
"files": [ "src/helper/functions.php" ]
}
我在src/helper/functions.php
文件中放入了数量非常有限的非常有用的函数,并像这样将其添加到项目中。
为使该功能在整个项目范围内可用,需要运行:
composer dump-autoload