2017-02-04 18 views
0

は、コントローラからprestashopで別のコントローラに変数を渡す方法はありますか?これは、元のライン+ . '&new_address=' . $address->idあるので、私はTools::redirectに固執する必要があることprestashopでコントローラからコントローラに変数を渡す方法は?

Tools::redirect('index.php?controller='.$back.($mod ? '&back='.$mod : '') . '&new_address=' . $address->id); 

注:私はこのようなAddressControllerオーバーライド上new_addressの変数を渡すことトリングです。

この行を使用すると、$ _GETの次のページにnew_addressが見つかりません。 OrderControllerとParentOrderControllerからも、私はそれを見ません。

+0

あなたは[この](https://github.com/PrestaShop/PrestaShop/blob/1.6.1てください。 .x/controllers/front/AddressController.php#L243)行が実行されていますか?そうであれば、途中で別のリダイレクトが行われている可能性があります。 – TheDrot

+0

はい、私はそれが実行されていると確信して、私はツール::リダイレクトの失敗の理由を見つけました、私はオーバーライドをコーディングしています。 – Stratboy

答えて

0

Tools :: redirectで理由を確認しました。これは、このような行があります。

$url = Tools::strReplaceFirst('&', '?', $url); 

ここで彼らは基本的に最初のもの以外のqueryvarを除いているので、あなたには、いくつかを追加する場合は、いずれかを見つけることができません。 index.php?a=1&b=2をお持ちの場合はindex.php?a=1?b=2になります。私は本当にポイントを見ていない...多分それはバグです。

だから私上書きツール::(モッド行はコメントしている)このようにリダイレクト:

public static function redirect($url, $base_uri = __PS_BASE_URI__, Link $link = null, $headers = null){ 
    if (!$link) $link = Context::getContext()->link; 

    $querystring = array_pop(explode('?', $url)); // MOD: Save the original querystring. I take the last item in array because sometimes (i think it's a bug) the $url is like index.php?controller=order.php?step=1, so 2 question marks. 

    if (strpos($url, 'http://') === false && strpos($url, 'https://') === false && $link) { 
    if (strpos($url, $base_uri) === 0) { 
     $url = substr($url, strlen($base_uri)); 
    } 
    if (strpos($url, 'index.php?controller=') !== false && strpos($url, 'index.php/') == 0) { 
     $url = substr($url, strlen('index.php?controller=')); 
     if (Configuration::get('PS_REWRITING_SETTINGS')) { 
     $url = Tools::strReplaceFirst('&', '?', $url); // ...Don't see the point here... 
     } 
    } 

    $explode = explode('?', $url); 

    // don't use ssl if url is home page 
    // used when logout for example 
    $use_ssl = !empty($url); 
    $url = $link->getPageLink($explode[0], $use_ssl); 

    if($querystring) $url .= '?'.$querystring; // MOD: adding full querystring!! Also deleted 3 lines that added $explode[1] instead 
    } 

    // Send additional headers 
    if ($headers) { 
    if (!is_array($headers)) $headers = array($headers); 

    foreach ($headers as $header) { 
     header($header); 
    } 
    } 

    header('Location: '.$url); 
    exit; 
} 
関連する問題