Basit bir URL yeniden yönlendiricisi yönlendirme yapılandırma ve denetleyici eylem parametreleri

3 Cevap php

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.

3 Cevap

Bölü ve diğer özel karakterleri yerleştirmek için, bunun yerine kendi ACSII kodları kullanın. Kodları ve kendi karakter listesi için, bu belgelere bakın:

http://www.ascii.cl/htmlcodes.htm

Sen eylem değişkenleri geçmek için bir geçiş dizisi eklemek gerekir.

Router::connect(
        '/redirector/:id/:url',
        array('controller' => 'redirects', 'action' => 'myredirectaction'),
        array(
                'id' => '[0-9]+',
                'url' => 'http.*',
                'pass' => array('id', 'url')
        )
);

http://book.cakephp.org/view/543/Passing-parameters-to-action: Sen neden buradasın hakkında ek bilgi bulabilirsiniz

Ben başlangıçta için umuyordum gibi URL ile bu işi yapmak için görünmüyor olabilir. Ben yapmak mümkün olmuştur iyi parametreleri yönlendirmek için URL sağlamaktır. Yani yönlendirme basit olur:

Router::connect(
        '/redirector',
        array('controller' => 'redirects', 'action' => 'myredirectaction')
);

Ve denetleyicisi eylem (hata işleme atlanmış) olur:

function myredirectaction() {
    $this->autoRender = false;
    $redirect_url = $this->params['url']['theurl'];
    $this->redirect($redirect_url);
}

Ve URL şekildedir:

http://example.com/redirector?theid=1&theurl=http://www.google.com