获取所有路由

Posted 百小僧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取所有路由相关的知识,希望对你有一定的参考价值。

public void 获取所有路由([FromServices] IHttpContextAccessor httpContextAccessor
        , [FromServices] ApplicationPartManager part
        , [FromServices] IActionDescriptorCollectionProvider provider
        , [FromServices] IApiDescriptionGroupCollectionProvider provider2
        , [FromServices] IEnumerable<EndpointDataSource> sources)
    
        var router = httpContextAccessor.HttpContext.Features.Get<IRouteValuesFeature>();
        var router2 = httpContextAccessor.HttpContext.Features.Get<IEndpointFeature>();

        var controllerFeature = new ControllerFeature();
        part.PopulateFeature(controllerFeature);

        var x = provider.ActionDescriptors.Items;
        var z = provider2.ApiDescriptionGroups.Items;

        var b = router.RouteValues;
        var c = router2.Endpoint;
    

  

codeigniter 获取所有声明的路由

【中文标题】codeigniter 获取所有声明的路由【英文标题】:codeigniter get all declared routes 【发布时间】:2012-11-03 16:08:10 【问题描述】:

如何在 codeigniter 中获取所有声明的路由?像前。 print_r($route)

因为这是问题所在,如果客户将他的用户名注册为“facebook”,他将被路由到 account/facebook_login 而不是他的个人资料,如果我更改了路线的顺序,所有链接都将被路由到客户/个人资料这是不,不!

所以基本上,我不想列出我声明的所有路由并将其放入另一个数组或数据库表中,而是想循环进入路由数组并检查是否已经声明了一个单词,以便我可以停止他们将该词注册为他们的用户名。

这是我的示例路线:

// Account routes
$route['login'] = 'account/login';
$route['logout'] = 'account/logout';
$route['register'] = 'account/register';
$route['facebook'] = 'account/facebook_login';
$route['twitter'] = 'account/twitter_login';
$route['settings'] = 'account/settings';

$route['validate/(:any)'] = 'validate/$1';

// Dynamic routes
$route['(:any)'] = 'customer/profile/$1';

【问题讨论】:

【参考方案1】:

从控制器你可以做到这一点

print_r($this->router->routes);

它将显示在 routes.php 中定义的所有路由。

【讨论】:

【参考方案2】:

首先我为我的英语感到抱歉,因为“我不是学校”。 我没有得到太多你想要指出的东西。也许你想用这个http://www.hirepinoy.com/born2code 做类似的事情。 但根据我使用 CodeIgniter 的经验,在你的路由中声明 $route['(:any)'] = 'customer/profile/$1'; 是个坏主意。

我认为你可以做的最好的选择是创建一个类来检查用户表中是否存在用户名,使用 HOOK 请参阅http://codeigniter.com/user_guide/general/hooks.html。 因此,因此当用户名(唯一字段)返回时,您可以将 $_SERVER['REQUEST_URI'] 修改为这样

$_SERVER['REQUEST_URI'] = '/customer/profile/'.$username;

所以基本上它会在codeigniter核心进程之前修改服务器请求,它是核心处理。

现在,问题可能是,当用户注册的用户名与您的控制器相同时,肯定不会被处理,因为它被修改为在costumer/profile/blahblah 上路由。您需要做的就是创建一个自定义验证来检查用户名是否已存在于数据库和/或您的控制器名称中。

你可以这样做

if (file_exists(APPPATH."controllers/$value.php")) 
    $this->CI->form_validation->set_message('is_unique', 'Username is already taken');  
    return FALSE;

【讨论】:

以上是关于获取所有路由的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spark 框架中获取所有公开的路由

SpringMVC 中获取所有的路由配置。

如何在 Symfony2 中获取控制器的所有路由列表?

尝试测试获取所有路由时出现“TypeError:无法读取 null 的属性 '1'”?

如何在Symfony2中获取控制器的所有路由列表?

如何获取网络中所有设备的名称和 IP 或获取我连接的路由器 IP?