小MVC逻辑:在哪里放数据格式化功能?

时间:2013-12-18 09:17:44

标签: php model-view-controller

我在主页和搜索结果中都有列表。

MODEL:

SELECT fields FROM blablabla

结果:

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

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

控制器:

通过点击并按ID和NAME进行转换。

[[ID,名称seo_name],[ID,名称seo_name],[ID,名称seo_name]]

* [1,'place1'] - > [1,'place1','1_place1'] *

查看:

只是展示它。

但这一次,我必须在“搜索”页面上再次这样做。我无法从前一个控制器复制粘贴转换代码,所以我需要创建这个函数,但是放在哪里?

1 个答案:

答案 0 :(得分:1)

正如杰克在评论中所说,你应该有表示数据库表中行的类。因此,如果您的pages表格包含idtitleseo_title列,那么您应该有一个代表您的应用中的类:

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

在创建一个SEO友好的标题方面,你通常会在Page模型中有一个“保存前”回调或setter方法,它在title属性上运行一个函数,lower-casing它,删除空格和标点符号等。这可能只是一个帮助类。

如果你有一个slug帮助器(SEO友好的标题也被称为slug),那么你可以用你的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友好的标题。