Codeigniter 4 如何在视图中调用控制器方法?
Posted
技术标签:
【中文标题】Codeigniter 4 如何在视图中调用控制器方法?【英文标题】:Codeigniter 4 How to call a controller method in a view? 【发布时间】:2022-01-20 04:22:46 【问题描述】:我在 BaseController 中有一个名为 pr 的函数。我可以在我的控制器中访问此功能,但我也想在视图中使用此功能。有办法吗?
编辑: 这就是我尝试在视图中使用 pr 的方式。
<div class="col-md-9">
<?php
$this->pr("11", 22);
我的公关功能是;
public function pr($array, $die = "", $type = "")
ini_set("xdebug.var_display_max_children", '-1');
ini_set("xdebug.var_display_max_data", '-1');
ini_set("xdebug.var_display_max_depth", '-1');
echo "<pre>";
if (!$type) print_r($array);
else var_dump($array);
echo "</pre>";
if ($die) die();
【问题讨论】:
请不要标记照片或截图,也不要复制粘贴整体代码。pr
是您的 \App\Controller\Home 类中的一个方法。所以应该是\App\Controller\Home::pr()
。相反,你打电话给CodeIgniter\View\View::pr()
。但是,您在视图中调用了 pr (您没有显示视图代码),但您做得不对。请多展示pr方法代码和你的看法。
@KoalaYeung 添加了我的观点和公关代码
【参考方案1】:
你打错了pr
:
pr
是您的 \App\Controller\Home 类中的一个方法。所以它应该是\App\Controller\Home::pr()。相反,您调用的是 \CodeIgniter\View\View::pr()。
视图可能会渲染到一些 \CodeIgniter\View\View 类实例中,因此在视图中调用 $this
会导致调用 \CodeIgniter\View\View::pr()
。这就是为什么$this->pr()
呼叫没有按预期工作的原因。
你的Home::pr()
是一个普通方法,只能在实例内部调用(即通过$this
在实例内部调用)。您的视图无权访问它。
您的pr
似乎没有针对Controller 实例做任何特定的事情(即没有在内部使用$this
),您可以简单地将其重写为公共静态方法,可以在您的视图中轻松调用。
所以,这可能对你有用。
控制器:
namespace App\Controllers;
...
class Home
...
public static function pr($array, $die = "", $type = "")
ini_set("xdebug.var_display_max_children", '-1');
ini_set("xdebug.var_display_max_data", '-1');
ini_set("xdebug.var_display_max_depth", '-1');
echo "<pre>";
if (!$type) print_r($array);
else var_dump($array);
echo "</pre>";
if ($die) die();
...
查看:
<div class="col-md-9">
<?php \App\Controllers\Home::pr("11", 22); ?>
【讨论】:
以上是关于Codeigniter 4 如何在视图中调用控制器方法?的主要内容,如果未能解决你的问题,请参考以下文章
在 codeigniter PATH 中调用控制器模型和视图