2014-10-28 3 views
1

안녕하세요 저는 yii의 URl 관리에 문제가 있습니다.Yii의 URL 관리 문제

모델 벤더와 다른 모델 제품이 있습니다. 두 컨트롤러 모두에 작업 정보가 있습니다. 이제 내 URL을 www.example.com/vendor/info/v-name/abc.html 대신

www.example.com/abc.html로 만들려고합니다. www.example.com/xyz.html www.example.com/product/info/p-name/xyz.html 대신

v-name과 p-name이 매개 변수입니다.

나는

'<v-name:\w+>'=>'vendor/info', 
'<p-name:\w+>'=>'product/info', 

로 재 작성 규칙을 작성했습니다하지만 그것은 작동하지 않습니다. 첫 번째 규칙이 제품 케이스에도 적용되고 결국에는 예외가 발생합니다. 무엇을해야합니까?

도움을 주셔서 감사합니다.

+0

'createUrl' 호출은 어떻게 생겼습니까? – Justinas

+0

내 createUrl은 내가 원하는 방식으로 정확하게 보인다. www.example.com/abc.html처럼 코드는 Yii :: app() -> createUrl ('vendor/info', array ('v-name'=> $ vendor_info-> url_name)); –

+0

{ 'vendor \/'=> '공급 업체/정보' ',' '제품 \/ =>'제품/정보 ',' – Justinas

답변

1

내가 더 일반적인 규칙을 사용하도록 권하고 싶습니다 :

'<controller:\w+>/<action:\w+>/name/<name:\w+>' => '<controller>/<action>'

이름 속성이 당신의 행동에 사용할 수 있습니다 :

public function actionInfo() { $name = Yii::app()->request->getParam('name', 'defaultValue'); }

+0

작동에 param 값을 가져 오는 데는 문제가 없지만 내가 직면하는 주된 문제는 공급 업체의 링크를 클릭하면 첫 번째 규칙이 적용되는 것처럼 규칙을 작성하는 것입니다. 매개 변수가 올바르게 전달되지만 제품의 링크를 클릭하면 다시 첫 번째 규칙이 적용되고 오류가 발생합니다. –

+0

시스템의 관점에서 두 URL은 동일한 정규 표현식 (\ w +)과 일치하기 때문에 www.example.com/abc.html www.example.com/xyz.html 과 동일하므로 두 URL은 동일합니다. , 그래서 그것은 모릅니다, 그것은 제품인지 또는 판매 업체인지를 알 수 있습니다. –

+0

네 말이 맞습니다. 하지만, 의 매개 변수가 시스템의 차이를 감지 할 수 있습니까? –

1
현재

여러분 모두 링크 수단 check if url contains word. 그러므로 http://example.com/example은 제품이나 공급 업체의 정보가 없습니다. 공급 업체 규칙이 제품 위에 있으므로 모든 URL이 첫 번째 규칙과 일치하므로 더 이상 실행되지 않습니다. 공급 업체인지 제품인지 알기 위해 "마커"를 추가해야합니다.

'vendor\/<v-name:\w+>' => 'vendor/info', 
'product\/<p-name:\w+>' => 'product/info', 

하지만 예, 귀하의 URL이 변경됩니다. 여전히 URL을 <v-name:\w+>\/v으로 바꿀 수 있으며 URL은 다음과 같습니다. http://www.example.com/some name of your vendor here/v