Codeigniter 4 如何在视图中调用控制器方法?

Codeigniter 4 How to call a controller method in a view?

我在 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 错了:

  1. pr 是您 \App\Controller\Home class 中的一个方法。所以应该是\App\Controller\Home::pr()。相反,您调用的是 \CodeIgniter\View\View::pr().

  2. 视图可能会呈现到某些 \CodeIgniter\View\View class 实例中,因此在视图中调用 $this 会导致调用 \CodeIgniter\View\View::pr()。这就是 $this->pr() 调用未按预期工作的原因。

  3. 你的Home::pr()是普通方法,只能在实例内部调用(即通过$this在实例内部调用)。您的视图无权访问它。

  4. 看来你的 pr 没有做任何特定于 Controller 实例的事情(即没有在里面使用 $this),你可以简单地将它重写为 public 静态方法,可以在你的视图中轻松调用。

所以,这可能对你有用。

控制器:

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); ?>