Symfony 5 -处理硬编码的长字符串

vyswwuz2  于 2023-02-23  发布在  其他
关注(0)|答案(2)|浏览(119)

我正在学习Symfony 5,想知道是否可以将长字符串/“消息”放入控制器(例如这里的AddFlash消息),或者有更好的存储方法。
我认为,我的解决方案可能会成为问题时,我试图把我的网站到一个不同的语言。

class RegisterController extends AbstractController
{

    public function index()
    {

        if ($form->isSubmitted() && $form->isValid()) {

            ...

            $this->addFlash(
                'info',
                "Congratulations {$user}! You are now a part of growing <b>Symf</b> community! <br>
                An activation link to <b>{$user->getEmail()}</b> was <u>not</u> sent because mailing is not implemented. 
                &nbsp <small>(...yet)</small>"
            );

        }

        ...
        
    }
}

教程和Symfony文档都是在控制器中做的,但我知道这可能只是一个例子。
所以我的问题是,在控制器的变量/值中放置长字符串是一个好的做法吗或者有更好的方法?

toe95027

toe950271#

更好的做法可能是将它们放在翻译文件中。更多信息https://symfony.com/doc/current/translation.html

cgh8pdjw

cgh8pdjw2#

技术备选方案

要提供Marks建议的翻译的替代方案(现在可能没有用,但将来可能会有用),您还可以使用一个方法或常量:

class RegisterController extends AbstractController
{
    private const WELCOME_MESSAGE = "Congratulations %s You are now a part of growing <b>Symf</b> community! <br>
                An activation link to <b>%s</b> was <u>not</u> sent because mailing is not implemented. 
                &nbsp <small>(...yet)</small>";

    public function index()
    {
        $this->addFlash('info', sprintf(self::WELCOME_MESSAGE, $user, $user->getEmail()));
    }
}

虽然它确实消除了实际逻辑中的噪音,但这并不好,这么大的const感觉很笨重。如果你想添加更多的文本呢?也许是FAQ的链接?让我们看看私有函数是如何做的:

class RegisterController extends AbstractController
{
    public function index()
    {
        $this->addFlash('info', $this->getWelcomeMessage($user));
    }

    private function getWelcomeMessage(User $user): string
    {
        return "Congratulations {$user}! You are now a part of growing <b>Symf</b> community! <br>
                An activation link to <b>{$user->getEmail()}</b> was <u>not</u> sent because mailing is not implemented. 
                &nbsp <small>(...yet)</small>";
    }

}

这也不是很大,因为控制器的任务是控制,而不是管理文本,现在有两个原因要换这个控制器,违反了单一责任。

但(IMO)真实的的解决方案是:

不要使用祝酒词。祝酒词是为短消息,如“成功”或“确认邮件发送”。你现在“滥用”这不是它的目的,你可以感觉到“阻力”的实现。
只需将$user重定向到一个欢迎页面,并使用该页面来解释正在发生的事情。您可以添加一些关于垃圾邮件箱检查的内容,或者添加一些图像来设置氛围。

相关问题