MVC逻辑很少:在哪里放置数据格式化功能


Little MVC logic: where to put data-formatting function?

我有地方可以列出,无论是在主页上,还是作为搜索结果。

型:

SELECT fields FROM blablabla

所以结果:

[[id,name],[id,name],[id,name]]

由于地方可以有自己的页面,我必须转换。它不能在模型中完成,所以:

控制器:

循环访问命中并按 ID 和 NAME 进行转换。

[

[id,name,seo_name],[id,name,seo_name],[id,name,seo_name]]

*[1, '地点1']

-> [1, '地点1', '1_place1']*

视图:

只是展示它。

但这一次,我必须在"搜索"页面上再次执行此操作。我无法复制粘贴以前的控制器转换代码,所以我需要创建这个函数,但是放在哪里?

正如 Jack 在注释中所说,你应该在数据库表中有表示行的类。因此,如果您有一个包含 idtitleseo_title 列的 pages 表,那么您应该有一个类来表示应用程序中的列:

<?php
class Page
{
    public $id;
    public $title;
    public $seo_title;
}

在创建 SEO 友好的标题方面,您通常会在 Page 模型中有一个"保存前"回调或 setter 方法,该方法在 title 属性上运行函数,将其小写,删除空格和标点符号等。这可能只是一个帮助程序类。

如果你有一个 slug 助手(SEO 友好的游戏也被称为 slugs),那么你可以在你的 setter 方法中调用它:

<?php
class Page
{
    public $title;
    public $slug;
    public function setTitle($title)
    {
        $this->title = $title;
        $this->slug = SlugHelper::createSlug($title);
    }
}

然后在设置页面标题时调用 setter 方法来创建 slug:

$page = new Page();
$page->setTitle('My Page');
print $page->title; // My Page
print $page->slug; // would be something like 'my-page'

然后,您可以将页面模型保存到数据库中,知道它也将具有对SEO友好的标题。