Php MVC功能-视图中是否正常?
我正在将我的站点从一些旧的意大利面编码升级到一些漂亮、干净的自定义MVC结构(并在这个过程中享受学习的乐趣) 在我显示博客列表的页面上,我有一个功能,可以帮助我为a链接动态构建HREF–通过$\u GET跟踪应用的过滤器…很难解释…但它是:Php MVC功能-视图中是否正常?,php,model-view-controller,templates,Php,Model View Controller,Templates,我正在将我的站点从一些旧的意大利面编码升级到一些漂亮、干净的自定义MVC结构(并在这个过程中享受学习的乐趣) 在我显示博客列表的页面上,我有一个功能,可以帮助我为a链接动态构建HREF–通过$\u GET跟踪应用的过滤器…很难解释…但它是: /* APPLY BROWSE CONTROLS / FILTERS | this function reads current $_GET values for controlling the feed filters, | and replaces
/* 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结构和表示与逻辑的完全分离来实现这一点。我的模板中是否允许使用函数
救命啊 我不确定您的特定框架,但在RubyonRails和ASP.NETMVC中,这类内容会转到助手类中。它们是UI关注点。现在我们来看看这里的逻辑。只是格式化、转换格式、构建HTML。您可以将它们放在模板的旁边,或者为它们提供单独的目录
我能推荐的是检查与您的框架绑定的示例。通常他们对框架有很好的了解。我不确定您的特定框架,但在Ruby on Rails和ASP.NET MVC中,这类内容会转到助手类中。它们是UI关注点。现在我们来看看这里的逻辑。只是格式化、转换格式、构建HTML。您可以将它们放在模板的旁边,或者为它们提供单独的目录
我能推荐的是检查与您的框架绑定的示例。通常,他们对框架有很好的了解。我使用以下测试:我想在“表示空间”中编写的代码是否决定表示什么,或如何表示它?如果答案是什么,那么它更像是业务逻辑,可能属于模板之外。如果是如何呈现它,那么它属于模板(或相关的支持功能) 例如,假设您为某些用户提供10%的折扣。计算折扣前后的具体价格显然是商业逻辑。测试是否有折扣,然后以红色显示是表示逻辑
当然,规则总是有例外的,但是应该承认这些例外,并且您应该在注释中明确说明为什么要做出例外。我使用以下测试:我想在“表示空间”中编写的代码是否决定要表示什么或如何表示它?如果答案是什么,那么它更像是业务逻辑,可能属于模板之外。如果是如何呈现它,那么它属于模板(或相关的支持功能) 例如,假设您为某些用户提供10%的折扣。计算折扣前后的具体价格显然是商业逻辑。测试是否有折扣,然后以红色显示是表示逻辑
当然,规则总是有例外的,但是应该承认这些例外,并且你应该在评论中特别说明你为什么要做出例外。hmm这很酷,我以前没有听说过帮助类……演示类会调用它们吗?什么叫它们?它们是从Template调用的嗯,太酷了,我以前没听说过helper类…presentation类叫它们吗?什么叫它们?它们是从templatesweet中调用的好逻辑…您认为哪一个适用于为href动态构建html?对我来说,似乎是什么和如何..哈哈,我的所有对象都有一个url()方法,返回该对象的规范url。我可以从模板中调用它。但是它只返回URL,而不是一个完全格式化的标签。这里有很好的逻辑…您认为哪一个适用于为href动态构建html?对我来说,似乎是什么和如何..哈哈,我的所有对象都有一个url()方法,返回该对象的规范url。我可以从模板中调用它。但它只返回URL,而不是完全格式化的标签。