我有一个显示公司详细信息的视图,并添加了该公司发出的订单清单(单独的型号和控制器)。
一切正常,但是用于显示订单列表的CGridView
由公司的控制器呈现(renderPartial()
),因此,CGridView
的默认控制器为{ {1}}而非company
会导致所有自动生成的URL(如更新/删除按钮)均无效,因为它们是作为order
生成的,因此应引用{{1 }}控制器。我通过手动为操作按钮创建URL来解决此问题:
/company/delete?id=
但是我不喜欢这种方法,因为这需要手动创建每个URL。我尝试设置order
的{{1}}字段,但是它是只读的。
如何修改$columns[] = array(
'class' => 'CButtonColumn',
'buttons' => array(
'delete' => array(
'label' => 'Download',
'url' => 'CController::createUrl("/order/delete", array("id"=>$data->id))',
'options' => array('class' => 'download'),
),
),
'template' => '{delete}',
);
正在使用的默认控制器/模型?
我还看到controller
生成了一个带有元素ID的隐藏“键” div,并且这些键具有CGridView
个URL,它们的控制器名称不正确,所以我真的需要以某种方式更改控制器{{ 1}}正在开发中,因为我不想冒险在错误的控制器中更新条目。
修改 我尝试创建控制器的实例,并使用该实例创建小部件:
CGridView
但是,即使创建的窗口小部件的owner属性(只读)良好(CGridView
),操作URL仍将使用实际路径(update
)而不是{{1 }}。
答案 0 :(得分:0)
当您使用相对路由(例如// MARK: - SHOW LOGIN ALERT
func showLoginAlert(_ mess:String) {
let alert = UIAlertController(title: APP_NAME,
message: mess,
preferredStyle: .alert)
let ok = UIAlertAction(title: "Login", style: .default, handler: { (action) -> Void in
let aVC = self.storyboard?.instantiateViewController(withIdentifier: "Intro") as! Intro
self.present(aVC, animated: true, completion: nil)
})
alert.addAction(ok)
let cancel = UIAlertAction(title: "Cancel", style: .destructive, handler: { (action) -> Void in })
alert.addAction(cancel)
present(alert, animated: true, completion: nil)
}
// MARK: - FIRE A SIMPLE ALERT
func simpleAlert(_ mess:String) {
let alert = UIAlertController(title: APP_NAME,
message: mess, preferredStyle: .alert)
let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in })
alert.addAction(ok)
present(alert, animated: true, completion: nil)
}
)时,Yii将使用当前请求上下文来解析路由。因此,使用哪个控制器渲染小部件都没有关系,delete
的路由将用作相对路由的基础。
在这种情况下,您无能为力-如果您的窗口小部件不应依赖于上下文,则应为URL使用绝对路由:
Yii::app()->controller
如果您不想在多个地方重复此操作,则可以创建小部件或帮助程序,它们将准备[
'class' => 'CButtonColumn',
'deleteButtonUrl' => 'Yii::app()->controller->createUrl("/order/delete",array("id"=>$data->primaryKey))',
// ...
],
设置。