Frage

Ich verwende Zend-Framework-1.9.5 eine Web-Anwendung zu machen, aber es ist Url_Helper in der Frage des Parameter-Reset auf mich ziemlich schwierig war !, Ich weiß, es ist eine gute Eigenschaft (Parameter zu bewahren), aber in den meisten Fällen ich brauche es nicht !. Also ich denke, die Standard-Router zu überschreiben es Parameter verlieren zu erzwingen Wenn ich danach fragen oder vielleicht einen bestimmten Parameter angeben, die es wie (lang, oder so ähnlich) hält.

Auch ich will es die Standard-Router machen, damit ich meinen Controller nicht bearbeiten, Ansichten zu erhalten getan!

Irgendwelche Vorschläge?

Update: Ich verbrachte den ganzen Morgen versucht, meine url Helfer Admin_View_Helper_Xurl zu schreiben, aber ich kann nichts tun, was das Problem löst:

<?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);
    }
}

Ich habe versucht, aktuelle URL-Parameter zu erhalten und sie filtern und die aktuellen Parameter löschen und meine gefilterten diejenigen passieren, aber ich konnte nichts tun, was es tut, ohne hart Code Bearbeitung eines Zend_Framework Code:. (

Danke

War es hilfreich?

Lösung 2

Ich kam mit dieser Lösung auf. Es dauerte 7 Stunden funktionsfähig zu sein.

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 $_wantedParams = array('module', 'controller', 'action', 'lang', 'page', 'search');
    protected $_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;
    }
}

Natürlich ist es eine Ansicht Helper-Klasse ist, kann nicht die beste Lösung sein, aber es funktioniert gut mit mir jetzt.

Andere Tipps

Wenn eine Verbindung eine Ansicht zu erzeugen, können Sie die Helfer fragen loswerden alle aparamters mit einem einfachen boolean zu bekommen:

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

Der letzte Parameter gibt an, ob Parameter zurückgesetzt wird oder nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top