Php 带有逻辑和html输出的循环应该进入模型还是视图?
我是OOP和MVC新手,目前正在使用CodeIgniter构建一个网站 关于循环是应该在视图中还是在模型中,似乎有很多不同的信息 一方面,我试图将所有html标记保留在视图中,但另一方面,我希望将混乱的PHP逻辑保留在视图之外。另外,我还需要使用模型中的函数格式化循环中的数据 组织这次活动的最佳方式是什么 以下是我当前实现的简化版本: 查看Php 带有逻辑和html输出的循环应该进入模型还是视图?,php,codeigniter,templates,loops,Php,Codeigniter,Templates,Loops,我是OOP和MVC新手,目前正在使用CodeIgniter构建一个网站 关于循环是应该在视图中还是在模型中,似乎有很多不同的信息 一方面,我试图将所有html标记保留在视图中,但另一方面,我希望将混乱的PHP逻辑保留在视图之外。另外,我还需要使用模型中的函数格式化循环中的数据 组织这次活动的最佳方式是什么 以下是我当前实现的简化版本: 查看 <section> <ul> <?php echo $albumTracklistHtml ?>
<section>
<ul>
<?php echo $albumTracklistHtml ?>
</ul>
</section>
型号
public function getAlbumTracklistHtml()
{
//$this->tracklisting returned from db call in other function
foreach($this->tracklisting as $song) {
$mp3 = $this->convertToAmazonUrl($song['mp3']);
$art = $this->formatArtUrl($song['art']);
$name = $this->formatTrackName($song['name']);
$class = 'mp3';
$btn ='';
if(substr($name, 0, 1) == '*') {
$class = 'load mp3';
$btn = '<span class="playBtn"></span>';
}
<li class="'.$class.'" '.$mp3.'>'.$btn.$name.'</li>';
}
}
公共函数getAlbumTracklistHtml()
{
//$this->tracklisting从其他函数中的db调用返回
foreach($this->tracklisting as$song){
$mp3=$this->convertToAmazonUrl($song['mp3']);
$art=$this->formatArtUrl($song['art']);
$name=$this->formatTrackName($song['name']);
$class='mp3';
$btn='';
如果(substr($name,0,1)='*'){
$class='loadmp3';
$btn='';
}
一般来说,请记住这不是一条硬性规定,如果你问十个不同的人,你会得到十个稍有不同的答案,但模型视图和控制器的工作基本上是:
不过,归根结底,我认为这对你来说并不重要。如果您非常喜欢将循环放在模型中,那么就这样做吧。最重要的事情就是发展你自己的习惯,然后坚持这些习惯,一般来说,记住这不是一条硬性规定,如果你问十个不同的人,你会得到十个稍微不同的答案,但模型视图和控制器的工作基本上是:
不过,归根结底,我认为这对你来说并不重要。如果您非常喜欢将循环放在模型中,那么就这样做吧。最重要的事情就是发展你自己的惯例,然后坚持这些惯例。根据我的经验,这取决于循环在做什么。可以有视图特定的循环。您可以循环浏览动态显示元素的html标记,这些标记应该出现在视图中
for($controller_sent_array as $element)
{
echo "<h4>$element</h4>";
}
考虑您的框架选择,考虑哪些循环正在处理什么,但在模型、视图或控制器中需要时应使用循环。根据我的经验,这取决于循环在做什么。可以有视图特定的循环。您可以循环浏览动态显示元素的html标记,这些标记应该出现在视图中
for($controller_sent_array as $element)
{
echo "<h4>$element</h4>";
}
考虑您的框架选择,考虑哪些循环正在处理什么,但在模型、视图或控制器中需要时应使用循环。以下是我如何处理视图:
<section>
<ul>
<?php foreach($album->getTracks() as $track): ?>
<li
class="<?php echo $track->isPlayable() ? 'load mp3' : '' ?>"
>
<span class="playBtn">
<?php echo $track->getName() ?>
</span>
</li>
<?php endforeach ?>
</ul>
</section>
以下是我将如何进行查看:
<section>
<ul>
<?php foreach($album->getTracks() as $track): ?>
<li
class="<?php echo $track->isPlayable() ? 'load mp3' : '' ?>"
>
<span class="playBtn">
<?php echo $track->getName() ?>
</span>
</li>
<?php endforeach ?>
</ul>
</section>
我会把它移到视野中。模型不应该包含html标记在模型中有标记,这是绝对错误的。让模型返回一个数组(或者一个数组数组,或者一个类数组,以更合适的为准),然后在视图中进行渲染。谢谢大家。但是在视图中调用模型函数时,我应该怎么做呢?e、 g.convertToAmazonUrl()您不需要。您将处理URL