You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter4实现今日课外活动展示时添加日期代码报错求助

问题解决:CodeIgniter4 今日课外活动展示及变量报错修复

一、报错原因分析

添加<p>Hari ini adalah: <?= esc($hari); ?></p>后报错,核心原因是控制器未将$hari变量传递到视图,视图无法识别该变量,删除后功能正常说明其他逻辑无问题。

二、分步解决方案

1. 修复$hari变量未定义问题

在控制器中生成印尼语格式的当日日期,并传递到视图:

// 示例:App\Controllers\Home.php
public function index()
{
    // 设置印尼时区
    date_default_timezone_set('Asia/Jakarta');
    
    // 手动映射印尼语星期、月份(避免依赖服务器locale配置)
    $hariIndo = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu'];
    $bulanIndo = ['', 'Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 
                  'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'];
    
    $today = new DateTime();
    // 生成印尼语格式日期(如:Senin, 15 Oktober 2024)
    $hari = $hariIndo[$today->format('w')] . ', ' . $today->format('d') . ' ' . 
            $bulanIndo[(int)$today->format('m')] . ' ' . $today->format('Y');

    // 传递变量到视图
    $data['hari'] = $hari;
    
    // 后续添加今日课外活动查询逻辑...
    return view('ekstra/index', $data);
}

2. 实现今日课外活动筛选功能

(1)创建/完善模型

// 示例:App\Models\EkstraModel.php
namespace App\Models;

use CodeIgniter\Model;

class EkstraModel extends Model
{
    protected $table = 'ekstrakurikuler'; // 替换为你的数据库表名
    protected $primaryKey = 'id'; // 对应数据库主键列
    protected $allowedFields = ['nama_ekstra', 'tanggal']; // 对应课外活动名称、日期列
}

(2)在控制器中添加查询逻辑

在刚才的控制器方法中,追加今日数据查询:

public function index()
{
    // ... 之前的$hari生成代码 ...
    
    $ekstraModel = new \App\Models\EkstraModel();
    // 根据数据库日期格式匹配查询(确保$hari格式和数据库中tanggal列完全一致)
    $todayEkstra = $ekstraModel->where('tanggal', $hari)->findAll();
    
    $data['ekstraList'] = $todayEkstra;
    
    return view('ekstra/index', $data);
}

(3)视图中展示数据

<!-- 示例:app/Views/ekstra/index.php -->
<p>Hari ini adalah: <?= esc($hari); ?></p>

<h3>Kegiatan Ekstrakurikuler Hari Ini</h3>
<?php if (!empty($ekstraList)) : ?>
    <ul>
        <?php foreach ($ekstraList as $item) : ?>
            <li><?= esc($item['nama_ekstra']); ?></li>
        <?php endforeach; ?>
    </ul>
<?php else : ?>
    <p>Tidak ada kegiatan ekstrakurikuler hari ini.</p>
<?php endif; ?>

三、注意事项

  • 日期格式一致性:必须确保控制器生成的$hari格式,和数据库tanggal列的存储格式完全一致(比如数据库存的是Senin, 15 Okt 2024,则需调整代码中的月份缩写)。
  • 数据库日期类型优化:如果数据库中日期列是DATE/DATETIME类型,建议用日期函数对比而非字符串匹配,例如:
    // 转换为MySQL日期格式对比
    $todayDbFormat = $today->format('Y-m-d');
    $todayEkstra = $ekstraModel->where('DATE(tanggal)', $todayDbFormat)->findAll();
    

内容的提问来源于stack exchange,提问作者jarum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:06:03