เปลี่ยนเส้นทางไปยัง URL ด้วยสตริงการสืบค้น


11

ในโมดูลของฉันหลังจากทำงานสคริปต์ฉันต้องเปลี่ยนเส้นทางไปยังหน้าเว็บที่มีสตริงข้อความค้นหาใน URL

นี่คือสิ่งที่ฉันมี:

$redirectUrl = 'http://magento.local/en_en/shop/index';
$redirectArgs = array('test' => '1');
$this->_redirect($redirectUrl, $redirectArgs);

ฉันก็ลอง:

Mage::app()->getFrontController()->getResponse()->setRedirect($redirectUrl, $redirectArgs)->sendResponse();

ทั้งสองวิธีมีข้อผิดพลาด: มีข้อผิดพลาดในการประมวลผลคำขอของคุณ

สิ่งที่ฉันคาดหวังคือการเปลี่ยนเส้นทางไปยัง http://magento.local/en_en/shop/index?test=1

ไม่มีใครรู้ว่าฉันจะประสบความสำเร็จได้อย่างไร

แก้ไข:

ตามที่แนะนำฉันได้ลอง:

$redirectUrl = 'http://magento.local/en_en/shop/index?test=1';
Mage::app()->getResponse()->setRedirect($redirectUrl);

ไม่มีข้อผิดพลาด แต่ไม่มีอะไรเกิดขึ้น ฉันไม่ได้อยู่ในคอนโทรลเลอร์

แก้ไข 2:

ฉันสิ้นสุดการใช้:

$redirectUrl = 'http://magento.local/en_en/shop/index?test=1';
Mage::app()->getResponse()->setRedirect($redirectUrl)->sendResponse();

ทำงานได้ตามที่คาดไว้! ขอขอบคุณ.

คำตอบ:


9

ทำไมไม่เพียงสร้าง URL แบบนี้

 $redirectUrl = 'http://magento.local/en_en/shop/index?test=1';

พารามิเตอร์ที่สองsetRedirectคือสำหรับรหัสการเปลี่ยนเส้นทาง (301, 302)

หากคุณต้องการสร้าง URL ภายในคุณสามารถลอง:

$redirectUrl = Mage::getUrl('module/controller/action', array('_query'=>'test=1'));

ถ้าอย่างนั้น $this->_redirect($redirectUrl);?
MrUpsidown

@MrUpsidown _redirectถ้าคุณอยู่ในตัวควบคุม หากคุณอยู่ที่อื่น:Mage::app()->getResponse()->setRedirect($redirectUrl);
Marius

ไม่เป็นไร. การเพิ่ม->sendResponse()ในตอนท้ายได้งาน!
MrUpsidown

@MrUpsidown ขอโทษ ฉันลืมเกี่ยวกับsendResponse
Marius


0

หากคุณต้องการเปลี่ยนเส้นทางไปยัง URL อื่นด้วยพารามิเตอร์ข้อความค้นหาคุณสามารถทำสิ่งนี้ได้:

$redirectUrl = 'http://magento.local/en_en/shop/index';
$query_parameters = array(
                '_query'=> array(
                    'test' => '1',
                    'test'=>'2'
                )
            );

$this->_redirect($redirectUrl, $query_parameters);

สิ่งนี้จะนำคุณไปที่: http: //magento.local/en_en/shop/index? test = 1 & test = 2


0

หากคุณลงเอยที่นี่จาก google กำลังใช้คอนโทรลเลอร์และต้องการเปลี่ยนเส้นทางไปยังอีกอาร์กิวเมนต์หนึ่งที่คุณสามารถใช้:

$this->_redirect('module/controller/action', $this->getRequest()->getParams());

ที่ไหนmodule, controllerและactionจะถูกแทนที่ด้วย*เพื่อรักษาค่าของมัน การกระทำอื่นในตัวควบคุมเดียวกัน:

$this->_redirect('*/*/anotherAction', $this->getRequest()->getParams());

ชื่อการกระทำเดียวกัน, sibling controller:

$this->_redirect('*/sibling/*', $this->getRequest()->getParams());

และอื่น ๆ ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.