CodeIgniter 4中Undefined variable $home错误排查求助
问题分析与解决方法
核心原因:控制器方法未被正确触发
你遇到的Undefined variable $home错误,本质是视图没有接收到控制器传递的$home变量,最可能的原因是你访问的路由没有指向indexController()方法。
CodeIgniter 4 默认会调用控制器的index()方法作为入口,如果你没有配置自定义路由,直接访问Index控制器时,系统会执行index()而非indexController(),导致$data数组根本没有被创建和传递给视图。
解决方法
方法1:修改控制器方法名为默认的index()
把控制器里的indexController()改名为index(),无需额外配置路由即可触发:
namespace App\Controllers; use CodeIgniter\Controller; use App\Models\indexModel; class Index extends Controller { public function index() // 改为默认方法名 { $account = new indexModel(); $data = [ 'home' => $account->findAll() ]; echo view('partial/header', $data); } }
方法2:配置自定义路由指向indexController()
如果想保留indexController()方法名,需要在app/Config/Routes.php里添加路由规则:
$routes->get('/', 'Index::indexController');
这样访问网站根目录时,系统会调用Index控制器的indexController()方法。
额外规范建议(非必须但推荐)
CodeIgniter 4 遵循PSR-4命名规范,模型类名建议使用大驼峰格式,把indexModel改为IndexModel,同时文件名对应改为IndexModel.php:
namespace App\Models; use CodeIgniter\Model; class IndexModel extends Model // 大驼峰类名 { protected $table = "home"; protected $allowedFields = [ 'front_name', 'back_name', 'jalan', 'email', 'telepon', 'facebook', 'whatsapp', 'instagram' ]; }
控制器里加载模型时也要对应修改:
use App\Models\IndexModel; // ... $account = new IndexModel();
内容的提问来源于stack exchange,提问作者Fadjrin
相关产品推荐
相关产品推荐

