Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ZF2-自定义和动态URL_Php_Zend Framework2 - Fatal编程技术网

Php ZF2-自定义和动态URL

Php ZF2-自定义和动态URL,php,zend-framework2,Php,Zend Framework2,我想从自定义URL动态路由到特定的操作和控制器。例如,我有下表: controller | action | alias ============================= home | index | myalias 我想在路由之前附加一些函数,我不确定是否会检查URL,以及是否会 my-site.com/myalias 然后应使用控制器主目录和操作索引,无需重定向。只需打开该操作和控制器,而不更改URL。有可能实现吗 到目前为止,我有这样的想法: public fu

我想从自定义URL动态路由到特定的操作和控制器。例如,我有下表:

controller | action | alias
=============================
home       | index  | myalias
我想在路由之前附加一些函数,我不确定是否会检查URL,以及是否会

my-site.com/myalias
然后应使用控制器主目录和操作索引,无需重定向。只需打开该操作和控制器,而不更改URL。有可能实现吗

到目前为止,我有这样的想法:

public function customRoutes(MvcEvent $e)
{
    $dbAdapter = $e->getApplication()->getServiceManager()->get('Zend\Db\Adapter\Adapter');
    // pobierz routingi
    $rowset = $dbAdapter->query("SELECT * FROM public.seo WHERE ghost IS NOT TRUE AND alias IS NOT NULL")->execute();

    $routeName = 'custom_route_';
    $i = 1;

    if (sizeof($rowset) > 0) {
        foreach ($rowset as $item) {

            if (strpos($item['alias'], '/') !== 0) {
                $alias = '/' . $item['alias'];
            } else {
                $alias = $item['alias'];
            }


            $route = \Zend\Mvc\Router\Http\Segment::factory(array(
                'route' => $alias . '[/:id][/:page]',
                'constraints' => array(
                    'id'     => '[0-9a-zA-Z]+',
                    'page' => 'page\-[a-zA-Z0-9_-]*',
                ),
                'defaults' => array(
                    'controller' => $item['controller'],
                    'action'     => $item['action'],
                ),
            ));


            $e->getRouter()->addRoute($routeName . $i, $route);

            $this->custom_routes[] = $routeName . $i;
            $i++;
        }
    }

}
现在我需要更改url帮助器以从自定义路由创建链接。例如,如果我有:

$this->url('home');
结果链接应为,因为别名位于数据库中:

/myalias
除:

/home

我不知道ZF2,但我在ZF1中做过多次。。。您只需使用硬编码控制器和操作设置自定义路由。这是我在为您的案例修改的ZF2文档中发现的:

// In bulk:
$router->addRoutes(array(
    // providing configuration to allow lazy-loading routes:
    'bar' => array(
        'type' => 'literal',
        'options' => array(
            'route' => '/myalias',
            'defaults' => array(
                'controller' => 'home',
                'action'     => 'index',
            ),
        ),
    ),
));

ZF2 DocRef:

但是别名不应该是常量-它应该是从数据库加载的变量。那么,这就是一个奇怪的用例。通过读取ZF2文档,您可以立即执行以下操作:将路由分配为/:alias,然后在索引操作中根据数据库选中:alias。。。但我想你有其他的一级控制器,那是不合适的间接。。。我要看的是自定义路由器类型,即扩展段路由器-请参阅文档,如果没有匹配的模块/控制器可用,请查询数据库。。。但正如我所说,我不知道你的用例。。。想澄清一下吗?我在之前的帖子中添加了一些内容。也许你能帮忙?我希望现在情况更清楚了。