Php 理解MVC中的URL路由
我试图创建一个非常基本的MVC框架来更好地理解这个模式 我无法理解URL路由部分。 到目前为止,我了解到url以这种格式包含3条基本信息: www.site.com/controller/method/querystring 因此,给定以下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
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'))