Domanda

Sto usando Zend-Framework 1.9.5 per creare un'applicazione web, ma è Url_Helper per me abbastanza complicato nella reimpostazione dei parametri! So che è una buona funzionalità (conservazione dei parametri) ma nella maggior parte dei casi Non ne ho bisogno !. Quindi sto pensando di sovrascrivere il router predefinito per forzarlo a perdere i parametri A meno che non lo chieda o magari specificando alcuni parametri che mantiene come (lang o qualcosa del genere).

Inoltre voglio renderlo il router predefinito in modo da non dover modificare i miei controller, viste per farlo!

Qualche suggerimento?

Aggiornamento: Ho trascorso l'intera mattinata a cercare di scrivere il mio helper Admin_View_Helper_Xurl , ma non ho potuto fare nulla che risolva il problema:

<?php
class Admin_View_Helper_Xurl extends Zend_View_Helper_Abstract
{
     public function xurl(array $urlOptions = array(), $name = 'default', $reset = false, $encode = true)
    {
        $router = Zend_Controller_Front::getInstance()->getRouter();

        $wanted_params = array('module', 'controller', 'action', 'lang', 'page', 'search');

        $route = $router->getCurrentRoute();

        $something = anyWayToGetThatObjectOrClass();

        $params = $something->getParams();

        foreach($params as $key => $val) {
            if (!in_array($key, $wanted_params)) {
                $params[$key] = null; // OR uset($params[$key]);
            }
        }

        $something->clearParams();
        $something->setParams($params);

        return $router->assemble($urlOptions, $name, $reset, $encode);
    }
}

Ho provato a ottenere i parametri URL correnti, a filtrarli, a cancellare i parametri correnti e a passare i miei parametri filtrati, ma non ho potuto fare nulla che lo facesse senza hard-code modificando un codice Zend_Framework :(.

Grazie

È stato utile?

Soluzione 2

Ho trovato questa soluzione. Ci sono volute 7 ore per essere funzionali.

class Zend_View_Helper_Xurl extends Zend_View_Helper_Abstract
{

    const RESET_ALL = 'all';
    const RESET_CUSTOM = 'normal';
    const RESET_NON_MVC = 'mvc';
    const RESET_NONE = 'none';


    protected 

Ho trovato questa soluzione. Ci sono volute 7 ore per essere funzionali.

<*>

Chiaramente è una classe View Helper, potrebbe non essere la soluzione migliore ma per ora funziona bene con me.

wantedParams = array('module', 'controller', 'action', 'lang', 'page', 'search'); protected

Ho trovato questa soluzione. Ci sono volute 7 ore per essere funzionali.

<*>

Chiaramente è una classe View Helper, potrebbe non essere la soluzione migliore ma per ora funziona bene con me.

router; /** * Generates an url given the name of a route. * * @access public * * @param array $urlOptions Options passed to the assemble method of the Route object. * @param mixed $name The name of a Route to use. If null it will use the current Route * @param bool $reset Whether or not to reset the route defaults with those provided * @return string Url for the link href attribute. */ public function __construct() { $router = Zend_Controller_Front::getInstance()->getRouter(); $this->_router = clone $router; } public function xurl(array $urlOptions = array(), $reset = 'mvc', $encode = true) { $urlOptions = $this->_getFilteredParams($urlOptions, $reset); return $this->_router->assemble($urlOptions, $name, true, $encode); } protected function _getFilteredParams($data = array(), $level) { // $filteredValues = array(); $request = Zend_Controller_Front::getInstance()->getRequest(); $filteredValues = $request->getUserParams(); $filteredValues['module'] = $request->getModuleName(); $filteredValues['controller'] = $request->getControllerName(); $filteredValues['action'] = $request->getActionName(); switch ($level) { case self::RESET_ALL: $filteredValues['module'] = null; $filteredValues['controller'] = null; $filteredValues['action'] = null; // break omitted intentionally case self::RESET_NON_MVC: $filteredValues['page'] = null; $filteredValues['lang'] = null; $filteredValues['search'] = null; // break omitted intentionally case self::RESET_CUSTOM: foreach ($filteredValues as $key=>$val) { if (!in_array($key, $this->_wantedParams)) { $filteredValues[$key] = null; } } break; case self::RESET_NONE: break; default: throw new RuntimeException('Unsuppoted Xurl URL helper reset level.'); break; } foreach ($filteredValues as $key => $val) { if (!array_key_exists($key, $data)) { $data[$key] = $val; } } return $data; } }

Chiaramente è una classe View Helper, potrebbe non essere la soluzione migliore ma per ora funziona bene con me.

Altri suggerimenti

Quando si genera un collegamento una vista, è possibile chiedere all'helper di sbarazzarsi di tutti gli parametri con un semplice valore booleano:

<?php echo $this->url(array('controller' => 'index', action => 'action'), 'default', true); ?>

L'ultimo parametro indica se ripristinare i parametri o meno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top