2017-04-06 95 views
1

我面临以下问题:在有订单记录的表中,我想在特定位置插入新记录或将记录复制/移动到另一个位置。Yii2错误的路线,如控制器/控制器/行动

在索引视图中,我在网格视图中定义了其他操作按钮{new} {copy} {move}。点击其中一个路由到一个名为select(controller/select)的新视图,该视图只有两个操作按钮{before} {after},表示该记录是放置在上面还是下面选定的记录。

点击其中一个按钮路由到控制器动作创建(如果以前被选中为新建)或控制器动作复制移动(控制器/创建或控制器/复制移动)。控制器完成他的工作,并用$ this-> redirect(['index'])返回索引视图。这工作正常。

再次点击索引视图{新} {复制} {移动}中的一个动作按钮我看到一个奇怪的路线:控制器/控制器/选择,而不是控制器/选择。此行为仅在我通过刷新浏览器从菜单调用索引视图时才会停止。

为什么会发生这种情况?这可能是因为之前在网格视图中选择操作后立即创建网格视图?以及如何避免这种行为?

这是工作流程:

call index view 
click on action button {new} {copy} or {move} 
create route controller/select 
get the select view 
in select view click on action button {before} or {after} 
create route controller/copy or controller/copy-move 
create a new record at the choosen position or copy/move it there 
return $this->redirect(['index']) after controller has done his job 
in index view again click onto action button {new} {copy} or {move} 
create route controller/controller/select instead of controller/select which ends in a 404 error. 
+0

如何生成到'controller/select'的链接? – gmc

+0

它在index.php中生成 - 在index.php中: – chrisly49

+0

@gmc其生成如此: 'before'=> function($ url,$ model){ $ session = Yii :: $ app-> session; $ mode = $ session ['mode']; $ url =($ mode ==='create')? 'create?idTo =':'copy-move?idTo ='; return Html :: a(''.FA :: icon('upload')。'', $ url。$ model ['id']。'&position = before', ['title'=> '标题')]); – chrisly49

回答

3

你用相对和绝对URL面临的问题。在yii2

// relative route: /index.php?r=admin%2Fpost%2Findex 
echo Url::to(['post/index']); 

// absolute route: /index.php?r=post%2Findex 
echo Url::to(['/post/index']); 

注: - 正斜杠需要

欲了解更多信息see this

0

貌似我得到的回答我的问题。我从视图文件中删除了所有的逻辑,用它的路由定义一个特定的动作,让kartik网格视图在列的动作部分生成url。所以在index.php中,我有三个动作,每个动作都有自己的路径:{new}路由到新的{copy}路由来复制和移动路径。

然后,我对select.php做了同样的操作,其中{before}路由到before和{after}路由到after之后。

在控制器中,路线被重定向到第一种情况下选择动作并创建动作或响应。第二种情况下的复制移动动作。

这个接缝工作正常,我再也没有弄错路线了。

感谢您的帮助。