2012-11-16 2 views
0

나는 CakePHP에서 링크를 실험 해본 결과 때때로 매개 변수를 전달하고 때로는 접두어가 붙은 이름을 전달한다는 것을 알게되었습니다. 어떤 두 링크 사이의 차이 : 그들이 만든 URL 인해 라우팅 기능에 크게 관계가CakePHP의 매개 변수 이해

$this->Html->link('Edit', array('controller'=>'users','action'=>'edit', $user['User']['id'])); 

$this->Html->link('Edit', array('controller'=>'users','action'=>'edit', 'id'=> $user['User']['id'])); 

,하지만 첫 번째 예제에서 내가 좋아하는 컨트롤러 메서드에서 직접 ID를 액세스 :

public function edit($id) 

그러나 명명 된 매개 변수에 대해 라우터를 사용하여 물리적으로 전달해야합니다.

누구든지이 문제에 대해 더 자세히 설명해 줄 수 있습니까? 차이점은 무엇이고 각각을 사용할 때 ...

CakePHP 3.0에서는 두 개의 링크가 여전히 작동하기 때문에 명명 된 매개 변수가 제거 된 것입니다.이 문제에 대한 의견이 있으십니까?

답변

2

라우터를 통해 명명 된 paramteres를 전달하지 않아도됩니다. 그들은 단순히 그들이 쿼리 문자열 매개 변수에 찬성 제거됩니다

$this->request->named[...] // or 
$this->request['named'][...]; // or 
$this->request->params['named'][...] 

에 결국 : (! 이미로) 다음 될 것 "? foo는 = 바 & ..." 사용할 수

$this->request->query('foo'); // >= 2.3 
$this->request->query['foo']; // <= 2.2 
를 통해

도 항상 사용할 수 있습니다 통과

$this->request->pass[...]; // or 
$this->request['pass'][...]; // or 
$this->request->params['pass'][...]; 
를 통해

하지만 모두 통과 onces 사이 http://book.cakephp.org/2.0/en/controllers/request-response.html

의 주요 차이점을 읽는 발견하고 이름을 가질 수있는가/쿼리 후자는 자신의 직접 액세스로 인해 전달 onces 반면 더 exchangable 있다는 것입니다

public function xyz($one, $two, $three) 

더 깊숙이 통합되어 전달 된 고유 한 정보에 사용해야합니다. 명명 된/쿼리는 특정 순서가없고 페이지 매김 및 다른 유창한 정보와 비슷합니다.

매개 변수가 실제로 사이트를 변경하는 경우 (자체 정식 링크 등) 다른 사람들은 이름 지정/쿼리 매개 변수없이 사이트로 '정식 링크'를 다시 수행하지 않지만 (페이지 매김 등에 중복 된 내용을 피하기 위해).

+0

그러면 쿼리 문자열 인 내용을 어떻게 라우팅합니까? 예를 들어'/ users? page = 2'를'/ users/page/2'로 바꾸고 싶다면 Cheers – Cameron

+0

/users/page : 2 /. 이것은 또한 자신의 페이지 매김 엔진에 의해 수행됩니다;) – func0der