gpt4 book ai didi

cakephp - 如何在不破坏 MVC 的情况下将格式化文本保存在 Controller 中?

转载 作者:行者123 更新时间:2023-12-02 12:15:19 25 4
gpt4 key购买 nike

假设我有一个 Comments 模型,其中有一个名为 text 的字段,可以存储格式化 (html) 文本

大多数情况下,此文本来自表单,并像往常一样调用 Comments->patchEntity() 保存,依此类推...

有时我会自动生成评论。现在我正在 Controller 中创建该内容。像这样的东西(请注意,这是一个过于简化的示例):

 // PostsController


public function view($id)
{
//
//
// if Post views are >= 1 billion

$comment = $this->Comments->newEntity();
$comment->text = "<strong>Congratulations!</strong> your Post just
hit 1 billion views! This is an auto generated
comment";
$this->Posts->Comments->save($comment);
}

我知道这是错误的,并且违背了 MVC 模式

此外,我无法在 Controller 中使用 HtmlHelper,因此如果我必须手动创建 html 标签。

我见过this问题,但这似乎不是一个干净的方法(也是蛋糕 2 的方法)

那么:在不破坏 MVC 的情况下实现我已经在做的事情的更简洁的方法是什么?

其他信息

问题一般是关于如何使用 cakephp 3 将生成的(HTML)内容保存到数据库。上面只是一个示例:我可以将该代码移至 afterSave 方法或创建一个监听器。我可以使用元素或助手来生成内容(或更可能两者都生成)

我认为应该有一种类似于 Email 类的方式:我可以在代码中的任何位置( Controller 、模型、监听器)调用 Email() 并使用模板生成电子邮件正文。我想做同样的事情并保存到数据库

为什么我需要这个?

也许这是一个 XY 问题,所以这是我的实际问题

我有一个非常复杂的 View ,它取决于许多表中存储的记录。我想在每次发生更改时跟踪该 View 的历史记录,因此我的想法是创建一个监听器,将该监听器附加到参与创建 View 的每个表,并在每次发生更改时保存 View 的快照更新

最佳答案

所以,按照@ndm的建议,这就是我所做的

 $vars = [/* my viewVars here */]
$view = new ViewBuilder();
$content = $view->setTemplate("path_to_my_template")
->setLayout(false) // I need an empty layout
->setHelpers(['Number']) // I need some additional helper
->build($vars) //here I pass my vars to the template
->render();

通过这种方式我可以获得我生成的内容。我可以在模型或事件监听器中使用上述代码。即在我可以做的模型中

$entity = $this->newEntity():
$entity->content = $content;
$this->save($entity);

关于cakephp - 如何在不破坏 MVC 的情况下将格式化文本保存在 Controller 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44656941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com