CakePHP basit bir yönlendirici denetleyicisi yapmaya çalışıyorum. Ben formda olması URL istiyorum:
http://example.com/redirector/<numeric id>/<url to redirect to>
Örneğin,
http://example.com/redirector/1/http://www.google.com
Ben yönlendirmek gerekir URL eğik çizgiler, parametreleri ve çapa gibi, tabii ki, daha karmaşık olabilir.
Benim eylem gibi bir şey olur ki ben rota yapılandırma yazmak için nasıl anlamaya mümkün görünmüyor olabilir:
class RedirectsController extends AppController {
function myredirectaction($id, $url) {
$this->autoRender = false;
$this->redirect($url);
}
Ben "/" 'ın url-to-yönlendirme-to karıştırır benim rota girişimi, deneyin ne olursa olsun gibi görünüyor ve parçalar halinde URL böler, ve bu artık benim eylem tanımı eşleşir. Ben ne yapmalıyım?
PHP ve CakePHP yeni am, bu yüzden size herhangi bir tavsiye takdir edilmektedir.
Update:
Peki yerine yukarıdaki örnekte URL, bu gibi bakmak URL-kaçtı olmuştur:
http://example.com/redirector/1/http%3A%2F%2Fwww.google.com
Ancak, benim yönlendirme hala çalışmıyor. İşte routes.php içinde ne var:
Router::connect(
'/redirector/:id/:url',
array('controller' => 'redirects', 'action' => 'myredirectaction'),
array(
'id' => '[0-9]+',
'url' => 'http.*'
)
);
Bu da o URL'yi çalıştığımda ne olsun:
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
Ve eylemden daha fazla uyarı o beklenen iki argüman alamadım çünkü.
Tabii ki, ben $ url kullanmadan önce ($ url) UrlDecode benim harekete değiştirdik.