【问题标题】:MVC function - okay in the view?MVC 功能 - 在视图中好吗?
【发布时间】:2009-12-09 01:05:44
【问题描述】:

我正在将我的网站从一些旧的意大利面条式编码升级为一些漂亮、干净的自定义 MVC 结构(并在此过程中享受有趣的学习)。

在显示博客列表的页面上,我有一个函数可以帮助我为 a 链接动态构建 HREF - 通过 $_GET 跟踪应用的过滤器......很难解释......但这里是:

/* APPLY BROWSE CONTROLS / FILTERS 
 | this function reads current $_GET values for controlling the feed filters,
 | and replaces the $value with the desired new $value
*/
function browse_controls($key,$value=null,$ret='url') {

    // find current control settings
    $browse_controls = array();
    if(array_key_exists('browse',$_GET)) { $browse_controls['browse'] = $_GET['browse']; }
    if(array_key_exists('display',$_GET)) { $browse_controls['display'] = $_GET['display']; }
    if(array_key_exists('q',$_GET)) { $browse_controls['q'] = $_GET['q']; }

    // replace desired setting
    if($value) {
        $browse_controls[$key] = $value;
    }else{
        unset($browse_controls[$key]);
    }

    // build url
    $url = ABS_DOMAIN . 'sale/';
    if(!empty($_GET['cat'])) { $url .= $_GET['cat'] . '/';}
    if(!empty($_GET['sub'])) { $url .= $_GET['sub'] . '/';}
    $url .= '?' . http_build_query($browse_controls);
    return $url;
}

我可以简单地调用这个查询:

<a href='<?php echo browse_controls('browse',$prev_page); ?>' class="crumb">Previous Page</a>

如何使用 MVC 结构以及完全分离表示和逻辑来实现相同的目标。我的模板中是否允许使用函数?

救命!

【问题讨论】:

    标签: php model-view-controller templates


    【解决方案1】:

    我使用以下测试:我想在“演示空间”中编写的代码是决定要呈现什么,还是如何呈现它?如果答案是what,那么它感觉更像是业务逻辑并且可能属于模板之外。如果是如何呈现它,那么它属于模板(或相关的支持功能)。

    例如,假设您为某些用户提供 10% 的折扣。在折扣之前/之后计算具体价格显然是商业逻辑。测试是否有折扣然后显示为红色是表示逻辑。

    当然,规则总是有例外的,但应该承认这些例外,并且您应该在评论中明确说明为什么您要制定例外。

    【讨论】:

    • 那里有很好的逻辑......你认为哪个适用于为 href 动态构建 html?不知何故,但对我来说是什么以及如何......哈哈
    • 我所有的对象都有一个 url() 方法,该方法返回该对象的规范 URL。我从模板调用它没有问题。但它只返回 URL,而不是完全格式化的A标签。
    【解决方案2】:

    我不确定你的特定框架,但在 Ruby on Rails 和 ASP.NET MVC 中,这种东西属于 帮助类。它们是 UI 问题。所以现在逻辑在这里。只是格式化、转换、构建 HTML。你可以把它们放在模板附近,或者给它们单独的目录。

    我可以推荐的是检查与您的框架绑定的示例。他们通常对框架有很好的了解。

    【讨论】:

    • 嗯,这很酷,我以前没有听说过助手类......演示类会调用它们吗?他们叫什么?
    • 它们是从模板中调用的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多