在视图中使用 foreach 的 Codeigniter

Posted

技术标签:

【中文标题】在视图中使用 foreach 的 Codeigniter【英文标题】:Codeigniter using foreach in view 【发布时间】:2015-06-23 02:42:03 【问题描述】:

我在 Apache xampp 设置上使用 Codeigniter,并第一次尝试在视图中使用 foreach,但我无法让它工作。

我的控制器代码:

class Test extends CI_Controller 

        public function index($page = 'testv')
    
            if ( ! file_exists(APPPATH.'/views/'.$page.'.php'))
            
                show_404();
            
                $this->load->model('testm');
                $data['news'] = $this->testm->get_news();

                $this->load->view('headder');
                $this->load->view($page, $data);
                $this->load->view('footer');
    

我的模特:

class Testm extends CI_Model 

    public function __construct()
    
        parent::__construct();
    

    Public function get_news()
    
        $query = $this->db->query('SELECT id, date, text FROM news');

        foreach ($query->result_array() as $row)
        
            echo $row['id'];
            echo $row['date'];
            echo $row['text'];
        
    

我的观点:

<main id='central_section'>
    <section id='logo_section'>
    <img src='<?php echo base_url(); ?>img/logo.png' id='small_logo' >
    </section>
    <section id='content'>
        <p class="large_headding">News</p>

            <?php foreach($news as $news)  ?>
                <article class="article_text">
                    <p class="segment_headding"><?php echo $news->date; ?></p>
                        <?php echo $news->text; ?>
                </article>
            <?php  ?>
        <div id="spacer"></div>
    </section>
</main>

目前我收到以下警告消息:

A PHP Error was encountered

Severity: Warning

Message: Invalid argument supplied for foreach()

Filename: views/testv.php

Line Number: 18

Backtrace:

File: C:\xampp\htdocs\tsh\CI\application\views\testv.php
Line: 18
Function: _error_handler

File: C:\xampp\htdocs\tsh\CI\application\controllers\test.php
Line: 16
Function: view

File: C:\xampp\htdocs\tsh\public_html\index.php
Line: 292
Function: require_once

但是我的数据库中的文本确实出现在页眉之外的页面顶部,所以我知道数据库正在连接并且正在收集其中的数据。谁能告诉我哪里出错了?

【问题讨论】:

【参考方案1】:

在您的控制器中,您正确将模型的结果分配给了一个变量:

$data['news'] = $this->testm->get_news();

但在您的模型中,您是 ECHOING 结果,而不是 RETURNING 它们。所以$data['news']null(因为模型的方法不返回任何东西),你不能迭代null of 当然-> 这就是你认为的错误。更改您的模型以返回一个数组,例如:

Public function get_news()

    $query = $this->db->query('SELECT id, date, text FROM news');
    return $query->result_array();

我的数据库中的文本确实出现在页面顶部

因为,事实上,您在输出视图之前回显它(如上所述),这就是为什么您在呈现的 html 之前看到它们

【讨论】:

不是我,我投了你一票,因为我发现你的解释非常有用。我没有将您的答案标记为正确答案的唯一原因是伊姆兰首先回答了他的答案,虽然没有包含太多细节,但确实回答了我的问题。没有冒犯的意思。【参考方案2】:

请试试这个:

在您的查看页面中:

<?php foreach($news->result() as $new)  ?>
        <article class="article_text">
            <p class="segment_headding"><?php echo $new->date; ?></p>
                <?php echo $new->text; ?>
        </article>
    <?php  ?>

【讨论】:

【参考方案3】:

您的模型函数 foreach 循环中存在问题,只需将其替换为:

$query = $this->db->query('SELECT id, date, text FROM news');
$result = $query->result_array();
return $result;

【讨论】:

谢谢,对视图文件稍作调整以将调用从 date; ?> 到 效果很好!【参考方案4】:
        <?php foreach($news as $new)  ?>
            <article class="article_text">
                <p class="segment_headding"><?php echo $new->date; ?></p>
                    <?php echo $new->text; ?>
            </article>
        <?php  ?>

尝试使用foreach($news as $new) 而不是foreach($news as $news)

【讨论】:

【参考方案5】:

使用

foreach($thing as $something): //it is important if not compulsory to use a different name for variables!!
some HTML
endforeach;

改为

【讨论】:

【参考方案6】:

试试这个答案:

你的控制器:

public function index($page = 'testv')

        if ( ! file_exists(APPPATH.'/views/'.$page.'.php'))
        
            show_404();
        
            $this->load->model('testm');
            $data['news'] = $this->testm->get_news();

            $this->load->view('headder');
            $this->load->view($page, $data);
            $this->load->view('footer');

模型功能:

Public function get_news()

    $query = $this->db->query('SELECT id, date, text FROM news');
    return $query;

查看文件:

<?php foreach($news->result() as $new)  ?>
    <article class="article_text">
        <p class="segment_headding"><?php echo $new->date; ?></p>
            <?php echo $new->text; ?>
    </article>
<?php  ?>

【讨论】:

【参考方案7】:

您可以使用与 HTML 兼容的 PHP 版本。这将有助于使用 PHP 自定义 HTML 代码

&lt;?php echo $var; ?&gt; 等于 &lt;?= $var ?&gt;

<?php foreach($allNews as $news): ?>
    <article class="article_text">
        <p class="segment_headding"><?= $news->date ?></p>
        <?= $news->text ?>
    </article>
<?php endforeach; ?>

【讨论】:

以上是关于在视图中使用 foreach 的 Codeigniter的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中使用 Foreach 视图?

在 ForEach 视图中使用 Conditional 对每个视图应用不同的效果

我无法在 SwiftUI 中使用 foreach 呈现我的视图

SwiftUI - 使用 ForEach 时,您应该在子视图中使用 `@State var` 还是 `let`

在 Laravel 视图中使用 foreach 变量

如何在视图中使用 ForEach 将 Swift 5 数组索引偏移到某个数字?