提问人:Robert Owen 提问时间:10/19/2023 最后编辑:Robert Owen 更新时间:10/21/2023 访问量:82
Codeigniter 4 查看未通过的单元参数
Codeigniter 4 View Cell Parameters not passing through
问:
视图中的代码,这是直接从文档中复制的,并且不起作用。
// 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 的控制器提供服务。
我应该补充一点,如果我不使用参数,视图单元格可以正常工作,我只想使用它们......
答:
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\Dropdown
DropdownCell
评论
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
评论