Codeigniter 4 查看未通过的单元参数

Codeigniter 4 View Cell Parameters not passing through

提问人:Robert Owen 提问时间:10/19/2023 最后编辑:Robert Owen 更新时间:10/21/2023 访问量:82

问:

视图中的代码,这是直接从文档中复制的,并且不起作用。

// app -> Cells -> DropdownCell.php

 namespace App\Cells;

use CodeIgniter\View\Cells\Cell;

class DropdownCell extends Cell
{
    protected $surveys; 
   
    public function courses($params): string
    {
        $this->surveys = model('SurveyModel');
        $courses = $this->surveys->getUserCourses(auth()->user()); 
        $data['items'] = []; 

        foreach ($courses as $c) {
            $data['items'][] = ['id' => $c->id, 'title' => $c->title];
        }
        return view('components/dropdown',$data);
 
    }
}

视图:

<?= view_cell('DropdownCell::courses', ['type' => 'test']) ?>

我收到错误:

函数 App\Cells\Dropdown::courses() 的参数太少,传递了 0 个

我看不出这是怎么回事?下拉单元格是按照文档指南使用 Spark 制作的。这由扩展 BaseController 的控制器提供服务。

我应该补充一点,如果我不使用参数,视图单元格可以正常工作,我只想使用它们......

PHP 火器 代码点 火器-4

评论

0赞 Vickel 10/20/2023
您当前的 CI4.x 版本是什么?
0赞 Robert Owen 10/20/2023
@Vickel版本 4.4.1
0赞 Vickel 10/20/2023
下拉单元格是使用 Spark 制作的:在最新的 CI 4.4.2 版本中,有一些关于 Spark 的更新/修复

答:

0赞 Developer Inside 10/19/2023 #1

下面介绍如何在视图单元格中修改方法:show

public function show(array $params = []): string
{
    return "<div class=\"alert alert-{$params['type']}\">{$params['message']}</div>";
}

通过在方法签名中添加 ,可以为数组提供默认值。这允许在不传递任何参数的情况下调用该方法,并且它将使用您设置的默认值。但是,您仍然可以根据需要传递参数以自定义视图单元格,就像您尝试在视图中执行的那样。$params = []$params

视图代码应按预期工作:

<?= view_cell('DropdownCell::show', ['type' => 'success', 'message' => 'The user has been updated.']) ?>

确保您已使用更新的 show 方法签名保存了视图单元格,并且您不会再遇到“参数太少”错误。

在代码中,您使用的是命名空间,但视图单元格名为 。确保命名空间和类名匹配App\Cells\DropdownDropdownCell

评论

0赞 Robert Owen 10/19/2023
我已经尝试过了,当我这样做时,没有数据仍在$params
0赞 Developer Inside 10/19/2023
请确保为视图单元格使用正确的命名空间。检查命名空间遗漏
0赞 Robert Owen 10/19/2023
我已经遵循了命名空间省略的准则。不幸的是,这些论点仍然没有通过。
0赞 Developer Inside 10/20/2023
分享更多源代码。
0赞 Robert Owen 10/21/2023 #2

我试图使用“简单单元格”背后的逻辑,但是我发现有效的方法是遵循“计算单元格”的说明

评论

0赞 Simon Weber 10/25/2023
您使用了“简单细胞”方法。如果删除 and 部分(来自“计算单元”方法),它应该可以工作。use CodeIgniter\View\Cells\Cell;extends Cell