2017-04-06 5 views
1

다음과 같은 문제가 있습니다. 정렬 된 레코드가있는 테이블에서 특정 위치에 새 레코드를 삽입하거나 레코드를 다른 위치로 복사/이동하려고합니다.컨트롤러/컨트롤러/동작과 같은 Yii2 잘못된 경로

인덱스보기에서 {new} {copy} {move}를 그리드보기로 정의했습니다. 그중 하나를 클릭하면 select (controller/select)라는 새로운보기로 이동합니다.이 두보기는 두 개의 작업 버튼 {before} {after}을 사용하여 동일한 테이블의 그리드보기를 사용하여 레코드를 위 또는 아래에 배치해야하는지 여부를 나타냅니다 선택된 레코드.

이 버튼 중 하나를 클릭하면 컨트롤러 작업 만들기 (이전에 새로 선택 했음) 또는 컨트롤러 작업 복사 이동 (컨트롤러/작성 또는 컨트롤러/복사 이동)으로 연결됩니다. 컨트롤러는 작업을 수행하고 $ this-> redirect ([ 'index'])를 사용하여 인덱스보기로 돌아갑니다. 이것은 올바르게 작동합니다.

인덱스보기에서 동작 버튼 중 하나를 다시 클릭하면 {new} {copy} {move} 컨트롤러/select 대신에 이상한 경로 : controller/controller/select가 표시됩니다. 이 동작은 브라우저를 새로 고치지 않아도 메뉴에서 인덱스 뷰를 호출 할 때만 중지됩니다.

왜 이런 일이 발생합니까? 이전에 그리드보기에서 작업을 선택한 후 즉시 그리드보기를 작성했기 때문일 수 있습니까? 그리고이 행동을 피하는 방법?

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

'컨트롤러/선택'에 대한 링크를 어떻게 생성합니까? – 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 ='; Html :: a (''.FA :: icon ('업로드'). '', $ 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} 라우트로 경로를 복사하고 {move} 이동할 라우트로 세 가지 조치를 취합니다.

그렇다면 select.php에 대한 작업은 {before} 전에 라우팅되고 {after}는 이후로 라우팅됩니다.

컨트롤러에서 경로는 첫 번째 경우에서 작업을 선택하고 작업 resp를 만들기 위해 리디렉션됩니다. 복사 - 두 번째 경우에 행동을 이동.

이 이음매가 제대로 작동하고 잘못된 경로가 더 이상 표시되지 않습니다.

도와 주셔서 감사합니다.