标题: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控制器代码块中新增加变量userage

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方法,就可以添加这些参数到方法中进行业务操作 如根据表单往数据库注册信息或者根据表单选择查询信息,删除某个信息

了解程度:多次修改,重点了解

 

 

URL4种模式

 

 

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

 

重启apachesudo /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

目的:自己定义一些经常使用的函数

了解程度:很少修改,基本了解

新建或修改控制器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控制器代码块中新增加变量userage

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方法,就可以添加这些参数到方法中进行业务操作 如根据表单往数据库注册信息或者根据表单选择查询信息,删除某个信息

了解程度:多次修改,重点了解

 

 

URL4种模式

 

 

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

 

重启apachesudo /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

目的:自己定义一些经常使用的函数

了解程度:很少修改,基本了解