代码之家  ›  专栏  ›  技术社区  ›  sqram

在MVC中隐藏URL路由

  •  2
  • sqram  · 技术社区  · 16 年前

    我试图创建一个非常基本的MVC框架来更好地理解模式。

    我无法理解URL路由部分。 到目前为止,我已经了解到URL包含3个基本信息,格式如下: www.site.com/controller/method/querystring

    因此,给定以下URL:

    www.site.com/user/delete/john
    
    'user' is the controller
    'delete' is the method of said controller
    'john' is the query string
    

    在我的框架中,我拥有它,所以如果在URL中没有指定控制器,它默认为“index”。 如果在URL中未指定方法,则默认为“show”(只输出HTML)。

    通过这种方式,我可以访问www.site.com,由于它在URL中没有控制器或方法,因此 控制器变为“index”和方法“show”,因此只加载索引视图。

    但是,如果我不想在URL中提供方法,而只想在www.site.com/controller/querystring中提供方法,该怎么办? 像这样: www.site.com/user/john

    这将理想地为约翰加载配置文件。 但是,框架认为URL中的“john”是要调用的方法,而不是查询字符串。

    标准是什么,区分两者的实用方法?

    PS:

    我的.htaccess中有这个

    RewriteRule ^(.*)$ index.php?$1 [L,QSA]
    

    将$_server['query_string']回送到 http://site/profile/john 给出“profile/john”/

    1 回复  |  直到 16 年前
        1
  •  2
  •   user187291    16 年前

    我的控制器通常定位一个处理程序方法,从更具体到更不具体地进行搜索。如果找到了一个方法,就用传递给它的参数“tail”来调用它。例如,如果 user/delete/john 它尝试调用,顺序如下:

     action_user_delete_john()
     action_user_delete('john')
     action_user('delete/john')
     generic_fallback_method('user/delete/john')
    

    在你的情况下,我会定义一组 user_<operation> 方法( action_user_delete , action_user_edit 等)和违约 action_user 如果没有,将调用的方法 operation 提供了param,它应该像 user/john

    我发现这种技术相当灵活和强大,但没有标准,你可以自由地发明你自己的。

    推荐文章