2013-07-09 1 views
0

findByKey()를 수행하는 기본적인 컨트롤러 동작이 있습니다. '45'합니다 (params.key) 존재하지 않는 경우CFWheels - params.key가없는 경우 리디렉션 사용자가 있습니까?

(45)는 그러나, 나는에 그냥/핀/리디렉션 할

/핀/쇼/: 같은 URL이 보일 것이다.

키를 지정하지 않은 경우에도 여전히 모든 게시물에 대해 표시 작업이 표시되는 것으로 보입니다. 나는 이것에 대해 약간 혼란 스럽다.

또한 params.key에 대한 show() 액션의 체크를하면 예상대로 작동하지 않습니다. 내 리디렉션이 발생하지 않습니다 ... 비록 매개 변수를 덤프해도 키가 표시되지 않습니다. 어떤 도움을 주시면 감사하겠습니다

public void function show() { 

    if(!structKeyExists(params, "key")) { 

     flashInsert(messages = [{ messageString="Key is required.", messageType="error" }]); 
     redirectTo(route="pin"); 

    } 

    param name="params.page" default="1"; 
    param name="params.pageQuantity" default="10"; 

    pins = model("pin").findByKey(

     key   = params.key, 
     returnAs = "query", 
     include  = "user", 
     order  = "createdat DESC", 
     page  = params.page, 
     perPage  = params.pageQuantity 

    ); 

} 

:

은 여기 내 쇼() 액션이다!

고마워, 마이클.

업데이트 :이 경로 함께 할 수있는 뭔가가있을 수 있습니다 보인다

?

addRoute(name="pinShow",  pattern="pin/show/[key]",  controller="pin",  action="show"); 
addRoute(name="pinEdit",  pattern="pin/edit/[key]",  controller="pin",  action="edit"); 
addRoute(name="pinDelete",  pattern="pin/delete/[key]",  controller="pin",  action="delete"); 
addRoute(name="pinUpdate",  pattern="pin/update",   controller="pin",  action="update"); 
addRoute(name="pinNew",   pattern="pin/new",    controller="pin",  action="new"); 
addRoute(name="pinCreate",  pattern="pin/create",   controller="pin",  action="create"); 
addRoute(name="pinWanted",  pattern="pin/wanted",   controller="pin",  action="wanted"); 
addRoute(name="pin",   pattern="pin",     controller="pin",  action="index"); 

그들처럼 그들이 경로없이 동일한 URL 패턴을 사용으로 이제,이 노선들은 많은 무의미한 것처럼 보일 수 있지만 계획이 향후 변경하는 것입니다 : 여기에 아래의 핀 내 노선이다.

/pin/show/키를 누르지 않으면/pin/index/controller 및 action에로드되지만 여전히/pin/show/URL이 URL에 표시됩니다.

+0

코드가 if 문을 만드는가? 키는 정의되었지만 비어 있습니까? –

+0

params.key가 구조체에 표시되는지 여부에 관계없이 if 문의 코드는 실행되지 않습니다. 흥미롭게도, 내가 params을 버리면, 나는 그 행동이 지표라고 봅니다.그래서 레코드가 발견되지 않았을 때처럼, URL이 여전히/pin/show/ –

답변

2

verifies() 이니셜 라이저로이를 상당히 정리할 수 있습니다.

function init() { 
    verifies(
    only  = "show", 
    params  = "key", 
    paramsTypes = "integer", 
    handler  = "handleInvalidShowParams" 
); 
} 

function show() { 
    param name="params.page" default="1"; 
    param name="params.pageQuantity" default="10"; 

    pins = model("pin").findByKey(
    key  = params.key, 
    returnAs = "query", 
    include = "user", 
    order = "createdat DESC", 
    page  = params.page, 
    perPage = params.pageQuantity 
); 
} 

private function handleInvalidShowParams() { 
    flashInsert(messages = [{ messageString="Key is required.", messageType="error" }]); 
    redirectTo(route="pin"); 
} 

당신이 볼 수 있듯이

, 우리는 key가 있고 정수 있는지 확인하는 검사를 추가합니다. 이러한 테스트 중 하나라도 실패하면 컨트롤러는 handleInvalidShowParams()을 실행하며, 필요한 작업을 수행 할 수 있습니다.

이것은 show()의 범위를 걱정해야 할 부분으로 유지하고 컨트롤러의 다른 메커니즘은 매개 변수 유효성 검사를 걱정할 수 있습니다. 나는 그 열쇠없이 /pin/show 패턴을 잡을 것으로 예상

addRoute(name="pinShow", pattern="pin/show/[key]", controller="pin", action="show"); 
addRoute(name="pinShow", pattern="pin/show",   controller="pin", action="show"); 
addRoute(name="pinEdit", pattern="pin/edit/[key]", controller="pin", action="edit"); 
addRoute(name="pinDelete", pattern="pin/delete/[key]", controller="pin", action="delete"); 
addRoute(name="pinUpdate", pattern="pin/update",  controller="pin", action="update"); 
addRoute(name="pinNew", pattern="pin/new",   controller="pin", action="new"); 
addRoute(name="pinCreate", pattern="pin/create",  controller="pin", action="create"); 
addRoute(name="pinWanted", pattern="pin/wanted",  controller="pin", action="wanted"); 
addRoute(name="pin",  pattern="pin",    controller="pin", action="index"); 

:

업데이트 내가 추가 한 2 라인을 살펴보십시오.

추가 크레딧으로,이 내용이 훨씬 더 사소하기 때문에 ColdRoute pluginaccompanying screencast series을 살펴 보시기 바랍니다.

+0

안녕하세요 Chris가 보여 주듯이, 내가 원하는 것이 아니라 기본 동작을로드합니다. 감사. 귀하의 코드를 사용했지만 여전히 키가 누락 되어도 코드를 실행하지 못했습니다. 플래시가 리디렉션되고 표시되는 유일한 시간은 유형이 문자열이 아니고 숫자가 아닌 경우입니다. 앱이 여전히 URL에/pin/show/action을 표시하지만/pin/index/action을로드하는 것처럼 보입니다. 왜 이런 일이 일어나는 지 아십니까? 어떤 종류의 디폴트 행동으로 바퀴가 떨어지는 것이 표준인가? –

+0

'[key]'없이'pin/show'를 잡는 다른 경로를 추가하고 show 액션을 가리킬 수 있습니다. 키가 없어서'index' 라우트와 매치되기 때문에 아마도'index'로 떨어질 것입니다. 더 많은 도움이 필요하면 'route.cfm'의 관련 부분을 질문에 추가하십시오. –

+0

안녕하세요 Chris,/핀/컨트롤러에서 내 경로를 표시하는 초기 게시물을 업데이트했습니다. 어떤 도움을 주시면 감사하겠습니다. 그것은 나에게 잘 보이지만 어쩌면 내가 그 문제에 대해 눈이 멀게 된 것이 분명합니다. –

관련 문제