繁体   English   中英

zend framework 2 +自定义路由

[英]zend framework 2 + custom routing

我尝试遵循该主题的建议: zend framework 2 +路由数据库

我有一个路线课:

    namespace Application\Router;

use Zend\Mvc\Router\Http\RouteInterface;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\Mvc\Router\RouteMatch;

class Content implements RouteInterface, ServiceLocatorAwareInterface {

protected $defaults = array();
protected $routerPluginManager = null;

public function __construct(array $defaults = array()) {
    $this->defaults = $defaults;
}

public function setServiceLocator(\Zend\ServiceManager\ServiceLocatorInterface $routerPluginManager) {
    $this->routerPluginManager = $routerPluginManager;
}

public function getServiceLocator() {
    return $this->routerPluginManager;
}

public static function factory($options = array()) {
    if ($options instanceof \Traversable) {
        $options = ArrayUtils::iteratorToArray($options);
    } elseif (!is_array($options)) {
        throw new InvalidArgumentException(__METHOD__ . ' expects an array or Traversable set of options');
    }

    if (!isset($options['defaults'])) {
        $options['defaults'] = array();
    }

    return new static($options['defaults']);
}

public function match(Request $request, $pathOffset = null) {
    if (!method_exists($request, 'getUri')) {
        return null;
    }

    $uri = $request->getUri();
    $fullPath = $uri->getPath();

    $path = substr($fullPath, $pathOffset);
    $alias = trim($path, '/');

    $options = $this->defaults;
    $options = array_merge($options, array(
        'path' => $alias
            ));

    return new RouteMatch($options);
}

public function assemble(array $params = array(), array $options = array()) {
    if (array_key_exists('path', $params)) {
        return '/' . $params['path'];
    }

    return '/';
}

public function getAssembledParams() {
    return array();
}

}

请注意match()函数返回Zend \\ Mvc \\ Router \\ RouteMatch实例的对象,但是在文件Zend \\ Mvc \\ Router \\ Http \\ TreeRouteStack中,它检查对象是否是RouteMatch的实例(没有命名空间的前缀)

if (
    ($match = $route->match($request, $baseUrlLength, $options)) instanceof RouteMatch
            && ($pathLength === null || $match->getLength() === $pathLength)
        )

在我的情况下,条件由于名称空间而失败。

有什么建议么?

好的,我知道了问题所在。 我应该返回Zend \\ Mvc \\ Router \\ Http \\ RouteMatch而不是返回Zend \\ Mvc \\ Router \\ RouteMatch

这解决了我的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM