标题:Thinkphp 3.2.3 零基础入门教程-控制器 方法篇
-------------------------------------------------------------------------------------------------------------------------------
时间:2018/2/16 18:52:09
-------------------------------------------------------------------------------------------------------------------------------
内容:
新建或修改控制器control-login
一般一个数据表是一个控制器,如管理user的控制器是userController,里面的方法可以写对user这个数据库的表的增删改查,如管理articles的控制器就是articlesController.
控制数据中article的增删改查
默认的控制器文件夹在项目文件app下模块文件夹admin下 控制器文件夹中
/tp/admin/controller/的IndexController.class.php
复制再粘贴/tp/app/admin/controller/文件夹下的IndexController.class.php
,重命名为LoginController.class.php
修改这个php文件 LoginController.class.php
把里面的控制器名称
class IndexController extends Controller {
改为
class LoginController
extends Controller {
既修改IndexController.class.php文件的名称和里面的class名称
在/tp/app//admin/controller/loginController.class.php中
public function index(){}中加上
一行 echo “<br>this is from
new controller-login”;
可以通过
/tp/index.php?m=admin&c=login&a=index
访问这个控制器 可以看到我的提示 this is from new controller-login
新建控制器目的:按照业务需要,当需要对不同的数据库中的表,数据对象进行操作的时候,创建不同的控制器来控制这些不同的数据对象
了解程度:重点了解 多次修改
新建或修改方法action-LoginHistory
方法action是本质是控制器文件中的代码,以控制器文件夹下的LoginController.class.php为例
里面 class
LoginController extends Controller里面的index方法既
public function index (){
}
在login控制器类中新增加一个 方法 loginhistory public function
public function loginHistory(){
echo “login at 2018-1-17 from loginhistory action”;
}
既可以通过
/tp/index.php?m=admin&c=login&a=loginhistory
访问这个方法了
看到login at 2018-1-17 from
loginhistory action
新建方法目的:完成对数据对象的具体动作如增加类 ,删除类,查找类,注册类,
还有一些身份验证 例如登录类 验证码判断,或者单单就是显示一个界面或者跳转到另外一个界面或者方法
每一类都包含类似的动作方法functions,不过实际运用中,都增加方法,很少增加类
了解程度:重点了解 多次修改
新建或修改参数values-user,age
在login控制器代码块中新增加变量user及age
public function loginhistory(){
// echo “login failed”;
echo “login at 2018-1-17,your name is '.$_GET['user'].' And
your age is '.$_GET['age'];}
}
既可以通过
/tp/index.php?m=admin&c=login&a= loginhistory &user=cotine&age=23
访问这个方法了
看到 login
at 2018-1-17 ,your name is cotine and your age is 23
其他修改方法和值的例子
或者增加
public function
user(){
echo 'id is '.$_GET['id'].'<BR>';
ECHO '这里是index模块下user方法';
}
function movie(){
echo
'my favor movie is '.$_GET['movie'].'<BR>';
}
http://localhost/tp/index.php?m=admin&c=login&a=user&id=cotine
http://localhost/tp/index.php?m=admin&c=login&a=moive&moive=wuhuchangnong
新建参数目的:数据库的增删改查 都需要添加具体的参数,通过页面表单的post或者get方法,就可以添加这些参数到方法中进行业务操作 , 如根据表单往数据库注册信息或者根据表单选择查询信息,删除某个信息
了解程度:多次修改,重点了解
URL的4种模式
在thiniphp/thinkphp.php记录了
const URL_COMMON
= 0; //普通模式
const URL_PATHINFO
= 1; //PATHINFO模式
const URL_REWRITE
= 2; //REWRITE模式
const URL_COMPAT
= 3; // 兼容模式
这4种模式 通过修改loginhistory方法的,调用框架自定义函数C,既显示当前URL是哪一种默认显示模式
public function loginhistory(){
Echo “当前URL模式值 “.C('URL_MODEL')."</br>";
//C 方法是框架自定义函数 ,
输出系统参数,定义在/tp/thinkphp/common/functions.php
}
通过url来显示URL_Model
配置值
/tp/index.php?m=admin&c=login&a=loginhistory
获得当前URL模式值 输出1,
显示出来的1这个默认值来自在框架文件夹下
thinkphp/conf/convention.php 中
'URL_MODEL'=>1,
可以通过在项目文件夹下
/app/common/config.php里面增加一行 重新来定义。
'URL_MODEL'=>1,
在项目文件夹下的定义优先级大于框架文件夹下的默认值
如在/app/common/config.php 改为
'URL_MODEL'=>0,
再刷新页面 既可看到echo C(‘URL_MODEL’)的值从1变成了0, 再删除'URL_MODEL'=>0, 即可恢复
那么'URL_MODEL'=>1这个值 既表示URL模式是pathinfo模式
pathinfo模式是什么意义 有什么用法呢
在当前方法loginhistory新增加一行输出
echo U(); //系统函数U,用显示当前URL模式下URL
通过/tp/index.php?m=admin&c=login&a=loginhistory 访问
因为
URL_Model=1为 pathinfo模式
pathinfo的表现形式输出,输出值为
/tp/index.php/Admin/Login/loginhistory.html
如果修改 /app/common/config.php
中 URL_Model=0为 普通模式
再刷新页面则显示默认URL为
/tp/index.php?m=Admin&c=Login&a=loginhistory
如果修改 /app/common/config.php
中 URL_Model=2
Rewrite模式
再刷新页面则显示默认URL为
/tp/Admin/Login/loginfailed.html
如果修改 /app/common/config.php
中 URL_Model=3 兼容模式
再刷新页面则显示默认URL为
/tp/index.php?s=/Admin/Login/loginfailed.html
无论任何URL模式都可以访问 既下面
/tp/index.php?m=Admin&c=Login&a=loginfailed
/tp/index.php/Admin/Login/loginfailed.html
/tp/Admin/Login/loginfailed.html
/tp/index.php?s=/Admin/Login/loginfailed.html
只是模式显示URL的样式不同而已,但是4种都存在
默认我们使用rewrite形式,既然2
隐藏index.php来访问最优网址
URL_Model=2 Rewrite模式是/tp/Admin/Login/loginfailed.html
但是实际无法访问 /tp/Admin/Login/loginfailed.html
必须使用/tp/index.php/Admin/Login/loginfailed.html
既然无法隐藏index.php这个入口文件
需要启用apache的重定向功能 启用.htaccess文件
改文件夹随着源代码在根目录中,如果mac中是被隐藏的
以mac为例
查看hattacces文件夹
在mac系统下,.htaccess文件默认是隐藏的,和DS_Store,.localized等文件被系统隐藏掉一样。
在终端依次执行下面指令
defaults write
com.apple.finder AppleShowAllFiles TRUE
killall Finder
查看htaccess 文件/tp/.htaccess
是否是下面内容 一般下载的文件都包含
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
//RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
RewriteRule ^(.*)$ http://localhost/tp/index.php?$1 [QSA,L]
</IfModule>
启用apache重定向功能
在/prvate/etc/apache2/httpd.conf
搜索 AllowOverride None
改成 AllowOverride
All
搜索rewrite_module
将前面的#去掉
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
重启apache:sudo
/usr/sbin/apachectl restart
可以满足
目的:隐藏url中入口文件夹简化url
了解程度:一次修改,重点了解
自定义函数创建
在控制器类文件
/tp/app/admin/controller/loginController.class.php里的loginhistory
方法增加一行
show(); 即可调用show这个函数
那么这个函数我们需要写在模块
或者项目自定义函数文件夹中
模块中既/tp/app/admin/common/common/functions.php(没有这个文件夹需要创建)
function show(){
echo “</br>hello new function-show”;
}
如果在项目中定义就在/tp/app/common/common/functions.php
其他和在模块中一致
通过访问/tp/admin/login/loginhistory
可以看到方法中的新函数了多一行文字hello new
function-show
目的:自己定义一些经常使用的函数
了解程度:很少修改,基本了解