Kohana/PHP-在将记录传递到视图之前向记录添加更多信息
场景:我将一个kohana记录集对象传递给一个视图,该视图将遍历每个记录并以适当的格式显示其值。在视图中,我必须用消息提醒用户。此警报只有在满足特定条件时才会激活,例如,view必须使用每条记录的Kohana/PHP-在将记录传递到视图之前向记录添加更多信息,php,kohana,kohana-orm,kohana-3.2,Php,Kohana,Kohana Orm,Kohana 3.2,场景:我将一个kohana记录集对象传递给一个视图,该视图将遍历每个记录并以适当的格式显示其值。在视图中,我必须用消息提醒用户。此警报只有在满足特定条件时才会激活,例如,view必须使用每条记录的date属性执行PHP datediff,并查看是否是向用户显示警报的最佳时间 我想的不是视图,而是在控制器内进行计算。但是,我认为在控制器内部使用循环是一个坏主意,循环遍历每个记录并进行计算,并将记录包装到包装器对象中,以及特定于视图的其他属性。我在模型中寻找的是一个回调函数,每次调用它时,都会获取一
date
属性执行PHP datediff,并查看是否是向用户显示警报的最佳时间
我想的不是视图,而是在控制器内进行计算。但是,我认为在控制器内部使用循环是一个坏主意,循环遍历每个记录并进行计算,并将记录包装到包装器对象中,以及特定于视图的其他属性。我在模型中寻找的是一个回调函数,每次调用它时,都会获取一条记录。我可以在那里计算并返回对象。科哈纳是否有可能采用这种方法?如果没有,请告诉我什么是适合此要求的最佳解决方案
谢谢你的时间和关注。的确,你的建议很好,我一直在使用它 我假设您有一个扩展ORM的模型。例如,您可以这样做
class Model_Example extends ORM {
protected $_primary_key = 'id';
protected $_table_name = 'example_table';
// possibly relations, filters etc.
function should_message_be_shown() {
if( !$this->_loaded ) {
throw new Kohana_Exception('Should only be called on loaded objects');
}
if( $this->date_created > ( time() - 3600 ) ) {
return true;
}
return false;
}
function get_user_message() {
if( !$this->_loaded ) {
throw new Kohana_Exception('Should only be called on loaded objects');
}
return 'Hi ' . $this->user_name . '! This is your personal message';
}
}
方法应该显示消息()
使用类变量Model\u Example::date\u created
。这假设您有一个名为date\u created
的表列,该列包含UNIX时间戳。因此,在这个特定的示例中,如果记录是在最后一个小时内创建的,则返回true
我添加了一个检查,以查看记录是否已实际加载,否则将抛出一个异常
要完成此示例,您可以在控制器和视图中获取并使用模型,如下所示:
class Controller_Example extends Controller {
function action_index() {
$records = ORM::factory('Example')->where('something', '=', true)->find_all();
$this->response->body(View::factory('example')
->set('examples', $records));
}
}
和视图文件:
<div class="example-list">
<?php foreach($examples as $example): ?>
<div class="example-item">
<h2><?php echo $example->title; ?></h2>
<?php if($example->should_message_be_shown()): ?>
<div class="message">
<?php echo $example->get_user_message(); ?>
</div>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
谢谢,这正是我想要的!