Php 理解MVC中的URL路由

Php 理解MVC中的URL路由,php,model-view-controller,routing,Php,Model View Controller,Routing,我试图创建一个非常基本的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

我试图创建一个非常基本的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中没有控制器或方法,所以 控制器变为“索引”和方法“显示”,因此只加载索引视图

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

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

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

附言:

我的.htaccess中有这个

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

将$\u SERVER['QUERY\u STRING']回显到中会得到'profile/john'/

我的控制器通常会找到一个处理程序方法,从更具体的到不太具体的搜索。如果找到一个方法,则调用该方法时会向其传递参数的“尾部”。例如,如果给定了
user/delete/john
,它将尝试按顺序调用:

 action_user_delete_john()
 action_user_delete('john')
 action_user('delete/john')
 generic_fallback_method('user/delete/john')
在您的情况下,我将定义一组
user
方法(
action\u user\u delete
action\u user\u edit
等)和一个默认的
action\u user
方法,当未提供
操作
参数时将调用该方法,并应处理
user/john
等URL


我发现这项技术非常灵活和强大,但没有标准,你可以自由发明自己的标准。

没有标准。一旦你以这种方式构建了一个URL www.site.com/controller/method/querystring,你就开始在开发人员身上强制执行规则还有什么其他的方法来构建URL呢?我最后做的是,在我将URL分解成碎片(site.com/a/b/c/d).“a”之后,第一个数组元素始终是控制器。然后我看‘b’,看看它是否是‘a’的一种方法。如果不是,则它是一个在实例化时传递给的参数。所以我刚才使用的这个例子中的url,会发生的是$a->b>(数组('c','d')…如果'b'不是'a'的方法,会发生的是$class=new$a(数组('b','c','d'))