Этот ответ не отвечает на вопрос в целом, но в конкретном случае - как получить доступ к контроллеру и использовать виджет в контексте оцененного выражения CDataColumn::$value
- вы можете использовать это:
$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()
, который вставляет экземпляр компонента в обратный вызов в качестве последнего параметра. В этом случае этим компонентом является CDataColumn
, который ссылается на контроллер, как показано.
Мне не нравится писать выражения PHP как строковые литералы, поэтому я рад найти эту опцию.
Комментарий к http://www.yiiframework.com/doc/api/1.1/CDataColumn#value-detail показывает нам другой способ использования виджета в столбце со значением, которое я еще не пробовал.