Yii CGridView更改控制器名称(用于生成URL)

时间:2019-04-17 13:14:53

标签: php yii yii1.x yii-widgets

我有一个显示公司详细信息的视图,并添加了该公司发出的订单清单(单独的型号和控制器)。 一切正常,但是用于显示订单列表的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 }}。

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))', // ... ], 设置。