Zend - her şeyi alın baz Url sonra (Kontrolör, Aksiyon, ve herhangi bir params)

5 Cevap php

Ben Zend ile bir giriş sistemi oluşturmak için çalışıyorum bir kullanıcı onlar onlar çalışıyorlardı URL'yi oluyor yaşıyorum sorunu içeri imzalı değilse onlar bir giriş sayfasına alınacaktır Kısıtlı bir sayfaya erişmeye çalıştığında elden önce erişim. Baz Url sonra her şeyi dönecektir Zend Fonksiyon var mı? ? Login / redirect = controllerName/actionName/param1/value1 /: Örneğin, giriş sayfasına bir QueryString parametre olarak gönderilecek "moduleName/controllerName/ActionName/param1/value1/param2/value2" vs vs (ex gerekir param2/value)

Ben denetleyicisi ve eylem adı alabilirsiniz, ve ben params olsun olsun, ama o zaten de modülü, denetleyici ve eylem içerir. Ben sadece ihtiyacınız olanı almak istiyorum. Ben bu gibi yapmanın uzun bir yol çalıştı:

$controllerName = Zend_Controller_Front::getInstance()->getRequest()->getControllerName();
$actionName = Zend_Controller_Front::getInstance()->getRequest()->getActionName();
$paramArray = Zend_Controller_Front::getInstance()->getRequest()->getParams();
$params = '';

foreach($paramArray as $key => $value)
    $params .= $key . "/" . $value;

$this->_redirect('/admin/login/?redirect=' . $controllerName . "/" . $actionName . "/" . $params);

ama o zaman bile ben istemiyorum modülü / admin / controller / index / etc gibi params ile sonuna kadar. Bu URL ya da en azından param değerleri olarak denetleyici ve eylem olmadan bir dize sadece params gibi Yani, nasıl bir dize olarak her şeyi elde edebilirsiniz?

* EDIT: Here is my current solution, but there has got to be a more elegant way of doing this *

            $moduleName = $this->getRequest()->getModuleName();
            $controllerName = $this->getRequest()->getControllerName();
            $actionName = $this->getRequest()->getActionName();
            $paramArray = $this->getRequest()->getParams();
            $params = '';

            foreach($paramArray as $key => $value)
                if($key <> "module" && $key <> "controller" && $key <> "action")
                    $params .= $key . "/" . $value . "/";

            $this->_redirect('/admin/login/?redirect=' . $moduleName . "/" . $controllerName . "/" . $actionName . "/" . $params);

5 Cevap

Ben böyle son istek URI iletmekten düşünüyorum:

$this->_redirect('/admin/login/?redirect='.urlencode($this->getRequest()->REQUEST_URI));

ben onun eski bir soru biliyorum ama gelecek referanslar için:

$this->getRequest()->getRequestUri();

İstediğin almalısınız ..

Hiçbir fikrim neden Zend bu özelliği yoktur, ama bu ben bunu başardık nasıl. Benim kullanım durumda ben yolları kullanılan yeni API url yapısı, varsayılan yönlendirme kullanarak kontrolörleri doğrudan gitti eski URL'ler yönlendirmek istedim oldu.

$filtered_params = array_diff_key(
  $this->_request->getParams(), 
  array_fill_keys( array('controller', 'module', 'action' ), 1) 
);

$this->_redirect('/api/1.0/?' . http_build_query($filtered_params));

Sen urlencode() kullanmayı deneyin ve urldecode() kodlamak için / bireysel param dizeleri deşifre olabilir. Bir örnek olacaktır:

// outputs %2Fpath%2Fto%2Ffile.php
$path = '/path/to/file.php';
echo urlencode($path);

Eski bir soru ama heres bir çözüm şu benim için çalıştı. Buradan vb kodlamak url isteyebilirsiniz

$currentRoute = substr($this->getRequest()->getRequestUri(),strlen($this->getRequest()->getBaseUrl()));