gpt4 book ai didi

widget - 在静态调用的方法中使用小部件

转载 作者:行者123 更新时间:2023-12-01 23:05:53 24 4
gpt4 key购买 nike

通常,通过在 CController 的实例上调用 CController::widget() 来使用小部件,通常是在 View 中调用 $this

但是如果我正在编写一个静态方法,比如说一个帮助程序,那么我就无法访问 CController 的实例。那么我该如何使用小部件呢?

让我们进一步说,这个辅助方法是在 CDataColumnvalue 属性的 eval() 表达式中调用的。那个糟糕的表达几乎没有任何背景。助手应该如何使用小部件?


编辑:代码示例

根据要求,一个 View 示例:

$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $model->search(),
'columns' => array(
array(
'name' => 'attrName',
'value' => '--USE WIDGET HERE--',
),
)
));

最佳答案

这个答案没有回答一般问题,但在特定情况下——如何在 CDataColumn::$value 的计算表达式的上下文中访问 Controller 和使用小部件——你可以使用这个:

$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $model->search(),
'columns' => array(
array(
'name' => 'attrName',
'value' => function ($data, $row, $column) {
$controller = $column->grid->owner;
$controller->widget(/* ... etc ... */);
},
),
)
));

诀窍是发现 CDataColumn::renderDataCellContent() 使用 CComponent::evaluateExpression(),它将组件实例作为最后一个参数注入(inject)到回调中。在这种情况下,组件是 CDataColumn,它引用 Controller ,如图所示。

我不喜欢将 PHP 表达式写成字符串文字,所以我很高兴找到这个选项。

关于 http://www.yiiframework.com/doc/api/1.1/CDataColumn#value-detail 的评论向我们展示了另一种我没有尝试过的列值中的小部件的方法。

关于widget - 在静态调用的方法中使用小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8898776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com