CakePHP에서 간단한 리디렉터 컨트롤러를 만들려고합니다. 내가 리디렉션해야하는 URL은 슬래시, 매개 변수와 앵커를 포함, 물론, 더 복잡 할 수간단한 URL 리디렉터의 라우팅 구성 및 컨트롤러 동작 매개 변수
http://example.com/redirector/1/http://www.google.com
, 예를 들어
http://example.com/redirector/<numeric id>/<url to redirect to>
: 나는 형태로 URL을하고 싶습니다 .
내가 좋아하는 내 행동이 보일 것이다 그래야 경로 구성을 작성하는 방법을 알아낼 수있을 것 없습니다:
class RedirectsController extends AppController {
function myredirectaction($id, $url) {
$this->autoRender = false;
$this->redirect($url);
}
그것은 내가는 "/"의 시도 어떤 것 같아 url-to-redirect-는 내 경로 시도를 혼란스럽게 만들고 URL을 조각으로 나눠서 더 이상 내 동작 정의와 일치하지 않습니다. 어떻게해야합니까?
저는 PHP와 CakePHP에 익숙하지 않으므로 조언을 해주시면 감사하겠습니다.
업데이트 :
그래서 대신 예제 URL 위가되었습니다 URL 이스케이프 같이하기 :
http://example.com/redirector/1/http%3A%2F%2Fwww.google.com
하지만, 내 라우팅이 여전히 작동하지 않습니다. 여기에 내가 routes.php에 무엇을 : 그것은 두 예상 인수를하지 않았기 때문에 내 행동에서
Warning (2): array_merge() [function.array-merge]: Argument #1 is not an array [CORE/cake/dispatcher.php, line 301]
Code | Context
$fromUrl = "redirector/1/http://www.google.com"
$params = array(
"pass" => array(),
"named" => array(),
"id" => "1",
"url" => "http://www.google.com",
"plugin" => null,
"controller" => "redirects",
"action" => "myredirectaction",
"form" => array()
)
$namedExpressions = array(
"Action" => "index|show|add|create|edit|update|remove|del|delete|view|item",
"Year" => "[12][0-9]{3}",
"Month" => "0[1-9]|1[012]",
"Day" => "0[1-9]|[12][0-9]|3[01]",
"ID" => "[0-9]+",
"UUID" => "[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}"
)
$Action = "index|show|add|create|edit|update|remove|del|delete|view|item"
$Year = "[12][0-9]{3}"
$Month = "0[1-9]|1[012]"
$Day = "0[1-9]|[12][0-9]|3[01]"
$ID = "[0-9]+"
$UUID = "[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}"
$url = array(
"url" => "/redirector/1/http://www.google.com"
)
array_merge - [internal], line ??
Dispatcher::parseParams() - CORE/cake/dispatcher.php, line 301
Dispatcher::dispatch() - CORE/cake/dispatcher.php, line 118
[main] - APP/webroot/index.php, line 88
그리고 더 경고 :
Router::connect(
'/redirector/:id/:url',
array('controller' => 'redirects', 'action' => 'myredirectaction'),
array(
'id' => '[0-9]+',
'url' => 'http.*'
)
);
이 내가 그 URL을하려고 할 때 무엇을 얻을 수 있습니다.
물론 $ url을 사용하기 전에 동작을 urldecode ($ url)로 변경했습니다.
그것은 밝혀도에 의한 URL을 인코딩 할 때, 서버는 여전히 디코드 된 URL을 PHP로 전달하고있었습니다. 이는 서버 구성을 변경하여 변경 될 수 있지만 모든 경우에 대한 옵션은 아닙니다. –