最近学习对PHP比较感兴趣,简单学习之后开始了解MVC架构----module,view,controller,找了一个比较经典的demo学习,在此分享一下 https://github.com/panique/php-login.git
前几个比较简单,基本没什么障碍,最后一个是FULL-MVC结构的,对我这个一直做嵌入式没接触过web前端的小白来说还是比较难理解的。
从概念上来说,对MVC架构比较好理解,module是与业务层面打交道的,view与页面展示息息相关,control则是负责控制转发,掌控大局。所以,这种机制决定了其设计上需采用单一入口,这样才能将所有请求通过control进行处理。代码没太大复杂性,在此表过不提,唯一疑惑的是index页面通过views\_templates\header.php进行框架设计,导航栏指向的是具体的url,这不符合单一入口的设计理念。通过运行程序,确实找不到相应页面。
demo既然是demo,那就说明他还是完整可行的,自身找原因。问了一位大神,说有一种rewrite的技术,可以改写url,一般通过在目录下的.htaccess文件实现。果不其然,在项目目录下存在一个这样奇怪的文件。接下来就研究rewrite的功能机制。
rewrite是通过rewriteRule,对当前目录及其子目录下的url进行改变,以apache为例,要想使用rewrite功能,需先加载Mod_Rewrite模块,可以通过echo phpinfo();看看apache是否已经加载mod_rewrite,如果没有在其配置文件中conf/httpd.conf文件进行相应修改。
- 使能 LoadModule rewrite_module modules/mod_rewrite.so
- 搜索AllowOverride 将None改为All
RewriteEngine On
#When using the script within a subfolder, put this path here, like /mysubfolder/
#If your app is in the root of your web folder, then pleae delete this line or comment it out like this line
RewriteBase /php-login-master/4-full-mvc-framework/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]