2015-01-06 2 views
4

모든 내장 기능 댓글 많은 있으며, 레일 (http://guides.rubyonrails.org/routing.html#nested-resources) 예를 들어Yii2 - 내가 찾을 수 Yii2 프레임 워크를 사용하여 중첩 된 자원 모범 사례

에 루비에 nested resources라는 것을 구현하기 위해. 따라서 index 액션을 사용하면 기사와 관련된 댓글에 /articles/1/comments URL을 통해 액세스 할 수 있습니다. /articles/1/comments/create를 통해 create 조치가 사용된다 등등 ...

내가이 actionIndexComments(), actionCreateComment()...라고 ArticlesController에 여러 액션 메소드를 추가해야합니까 때?

또는 GET을 통해 ?article_id=1 매개 변수를 전달하고 필터링에 사용해야합니까? CommentsController?

또는 중첩 된 경로를 처리 할 수있는 사용자 지정 UrlManager 클래스를 구현해야합니까? (누군가 이미 구현 한 적이 있습니까?)

지금 가장 좋은 방법은 무엇입니까?

+0

여러 행동을 취하는 것이 가장 좋습니다 – Justinas

답변

5

UrlManager로 쉽게이 작업을 수행 할 수 있습니다. 또한 실제 작업을 배치 할 위치에 따라 다릅니다. 의 두 경우는 (GET에서) article_id를 액세스 할 수 있습니다에서

'article/<article_id:\d+>/comments/create/' => 'comment/create', 
'article/<article_id:\d+>/comments/' => 'comment/index', 

을 : 코멘트 컨트롤러에 대한 예를 들어이 같은 규칙을 정의 할 수 있습니다

당신은 문서 컨트롤러 또는 의견 컨트롤러 중 하나를 넣을 수 있습니다 작업을 만들거나 색인화하십시오. 기사에 액션을 넣고 싶다면 똑같은 일을 할 수 있습니다. 더 우주에 대한

+0

저를 도와주세요.이 규칙을 어디에 정의해야합니까? 나는'팀 '과'플레이'를 가지고 있고, 나는'팀/1/플레이어/생성 '과 같은 URL을 원한다. 여기서 1은'team_id'이다. – heavymetal91

4

:

그것은 관련이 경우
'GET,HEAD v1/articles/<id:\d+>/comments' => 
    'v1/articles/comment/index', 
'GET,HEAD v1/<article/<id:\d+>/comments/<id:\d+>' => 
    'v1/articles/comment/view', 
'POST v1/articles/<id:\d+>/comments' => 
    'v1/articles/comment/create', 
'PUT,PATCH v1/article/<id:\d+>/comments' => 
    'v1/articles/comment/update', 
'DELETE v1/article/<id:\d+>/comments' => 
    'v1/articles/comment/delete', 
0

나머지 API의 내장 당신은 다음의 $prefix 속성으로하고 있음을 달성하는 데 도움이 될 수 있습니다 대신 yii\web\UrlRuleyii\rest\UrlRule을 사용하고 있습니다 :

'rules' => [ 
    [ 
     'class' => 'yii\rest\UrlRule', 
     'controller' => ['players' => 'v1/player', 'trophies' => 'v1/trophy'], 
     'prefix' => 'teams/<team_id:\d+>', 
    ], 
], 

/teams/1/players 
/teams/1/players/2 
/teams/1/trophies 
/teams/1/trophies/4 
다음 엔드 포인트에 필요한 규칙을 생성합니다

이 원칙을 바탕으로 구축 된이 extension도 있으며 관련 도우미 동작을 제공합니다.