2017-04-06 2 views
1

Ich stehe vor dem folgenden Problem: In einer Tabelle mit geordneten Datensätzen möchte ich einen neuen Datensatz an einer bestimmten Stelle einfügen oder einen Datensatz kopieren/an eine andere Position verschieben.Yii2 falsche Route wie Controller/Controller/Aktion

In der Indexansicht habe ich die zusätzlichen Aktionsschaltflächen {new} {copy} {move} in der Rasteransicht definiert. Ein Klick auf eine dieser Routen führt zu einer neuen Ansicht namens (controller/select) mit einer Rasteransicht der gleichen Tabelle mit nur zwei Aktionsschaltflächen, {before} {after}, die angibt, ob der Datensatz über oder unter der Position platziert werden soll ausgewählter Datensatz

Klicken Sie auf eine dieser Schaltflächen Routen zu der Controller-Aktion erstellen (wenn zuvor wurde neu gewählt) oder die Controller-Aktion copy-move (controller/create oder controller/copy-move). Der Controller erledigt seine Arbeit und kehrt mit $ this-> redirect (['index']) zur Indexansicht zurück. Dies funktioniert ordnungsgemäß.

Nochmals auf einen der Aktionsschaltflächen in der Indexansicht klicken {new} {copy} {move} Ich sehe eine seltsame Route: controller/controller/select statt controller/select. Dieses Verhalten wird nur gestoppt, wenn ich die Indexansicht aus dem Menü aufruft, nicht durch Aktualisieren des Browsers.

Warum passiert das? Liegt es vielleicht daran, dass Sie sofort eine Rasteransicht erstellen, nachdem Sie zuvor eine Aktion in einer Rasteransicht ausgewählt haben? Und wie kann man dieses Verhalten vermeiden?

Dies ist der Arbeitsablauf:

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

Wie generieren Sie den Link zu 'controller/select'? – gmc

+0

Sein erzeugt als in index.php - in index.php: – chrisly49

+0

@ gmc Sein erzeugt als solches: 'vor' => funktion ($ url, $ modell) { $ session = Yii :: $ app-> session; $ mode = $ session ['mode']; $ url = ($ mode === 'create')? 'create? idTo =': 'copy-move? idTo ='; Rückgabe Html :: a ('' .FA :: Symbol ('Upload'). '', $ url. $ Modell ['ID']. '& Position = vor', ['Titel' => 'Titel')]); – chrisly49

Antwort

3

Sie Problem mit relativen und absoluten Urls konfrontiert sind. In 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']); 

HINWEIS: - Schrägstrich wird

Für weitere Informationen erforderlich see this

0

Sieht aus wie ich die Antwort auf meine Frage bekam. Ich habe die gesamte Logik aus der View-Datei entfernt, indem ich eine bestimmte Aktion mit der Route definiert habe, in der die Kart-Grid-Ansicht die URL im Aktionsteil der Spalten generiert. In index.php habe ich drei Aktionen mit jeweils einer eigenen Route: {new} Routen zu neuen, {copy} Routen zum Kopieren und {move} Routen zum Verschieben.

Dann habe ich das selbe für select.php gemacht, wo die Aktionen sind {vorher} Routing zu vor und {nach} Routing zu nach.

In der Steuerung werden die Routen dann umgeleitet, um die Aktion im ersten Fall auszuwählen und um eine Aktion bzw. eine Aktion zu erstellen. copy-move-Aktion im zweiten Fall.

Das scheint richtig zu funktionieren und ich bekomme den falschen Weg nicht mehr.

Danke für Ihre Hilfe.