Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带有逻辑和html输出的循环应该进入模型还是视图?_Php_Codeigniter_Templates_Loops - Fatal编程技术网

Php 带有逻辑和html输出的循环应该进入模型还是视图?

Php 带有逻辑和html输出的循环应该进入模型还是视图?,php,codeigniter,templates,loops,Php,Codeigniter,Templates,Loops,我是OOP和MVC新手,目前正在使用CodeIgniter构建一个网站 关于循环是应该在视图中还是在模型中,似乎有很多不同的信息 一方面,我试图将所有html标记保留在视图中,但另一方面,我希望将混乱的PHP逻辑保留在视图之外。另外,我还需要使用模型中的函数格式化循环中的数据 组织这次活动的最佳方式是什么 以下是我当前实现的简化版本: 查看 <section> <ul> <?php echo $albumTracklistHtml ?>

我是OOP和MVC新手,目前正在使用CodeIgniter构建一个网站

关于循环是应该在视图中还是在模型中,似乎有很多不同的信息

一方面,我试图将所有html标记保留在视图中,但另一方面,我希望将混乱的PHP逻辑保留在视图之外。另外,我还需要使用模型中的函数格式化循环中的数据

组织这次活动的最佳方式是什么

以下是我当前实现的简化版本:

查看

<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=''; }
  • .$btn.$name.
  • ”; } }
    一般来说,请记住这不是一条硬性规定,如果你问十个不同的人,你会得到十个稍有不同的答案,但模型视图和控制器的工作基本上是:

  • 该模型为控制器和视图提供了一种从另一个源(例如数据库)访问数据的方法。它基本上是对存储在其中的数据的抽象
  • 视图只显示给定的数据
  • 控制器将模型的数据与视图连接,以便视图可以显示数据
  • 我认为您发布的示例代码很好,符合这些定义。您的模型检索(或处理)数据,控制器将结果数据交给视图,视图只显示数据

    然而,我也认为模型简单地返回一个项目列表,然后视图循环并显示每个项目是很好的(通常我更喜欢这样)。当然,视图“不应该”进行大量的处理,但是输出每个项目的HTML似乎正是它应该做的。我喜欢这样做的原因纯粹是为了分离关注点——您的模型应该是相当HTML不可知的。与中一样,如果您曾经编写过一个非基于web的应用程序来与相同的数据交互,它可以使用相同的模型。因此,我会在视图中放置任何HTML呈现代码。尽管它需要一些循环逻辑


    不过,归根结底,我认为这对你来说并不重要。如果您非常喜欢将循环放在模型中,那么就这样做吧。最重要的事情就是发展你自己的习惯,然后坚持这些习惯,一般来说,记住这不是一条硬性规定,如果你问十个不同的人,你会得到十个稍微不同的答案,但模型视图和控制器的工作基本上是:

  • 该模型为控制器和视图提供了一种从另一个源(例如数据库)访问数据的方法。它基本上是对存储在其中的数据的抽象
  • 视图只显示给定的数据
  • 控制器将模型的数据与视图连接,以便视图可以显示数据
  • 我认为您发布的示例代码很好,符合这些定义。您的模型检索(或处理)数据,控制器将结果数据交给视图,视图只显示数据

    然而,我也认为模型简单地返回一个项目列表,然后视图循环并显示每个项目是很好的(通常我更喜欢这样)。当然,视图“不应该”进行大量的处理,但是输出每个项目的HTML似乎正是它应该做的。我喜欢这样做的原因纯粹是为了分离关注点——您的模型应该是相当HTML不可知的。与中一样,如果您曾经编写过一个非基于web的应用程序来与相同的数据交互,它可以使用相同的模型。因此,我会在视图中放置任何HTML呈现代码。尽管它需要一些循环逻辑


    不过,归根结底,我认为这对你来说并不重要。如果您非常喜欢将循环放在模型中,那么就这样做吧。最重要的事情就是发展你自己的惯例,然后坚持这些惯例。根据我的经验,这取决于循环在做什么。可以有视图特定的循环。您可以循环浏览动态显示元素的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