thinkphp模型

1.获取系统常量信息的方法:在控制器DengLuController里面下写入下面的方法,然后调用该方法。

public function test()
    {
        //echo "这是测试的"
        //$this->assign("a","world");
        //$this->show();

        var_dump(get_defined_constants());//获取系统常量信息。里面加上参数true,就会按照类把所有的信息显示出来。

    }

系统信息里面比较重要的是user里面的信息,有时候会用到这些信息。下面都是比较重要的信息。

//‘__ROOT__‘ => string ‘/thinkphp‘ (length=9)  //整个tp框架根目录
//‘__INFO__‘ => string ‘Admin/DengLu/test‘ (length=17)  //获取模块名/控制器名/方法名
//‘__SELF__‘ => string ‘/thinkphp/index.php/Admin/DengLu/test‘ (length=37) //代表自身的路径
//‘__APP__‘ => string ‘/thinkphp/index.php‘ (length=19)  //代表入口文件地址
// ‘__MODULE__‘ => string ‘/thinkphp/index.php/Admin‘ (length=25)  //模块文件夹路径
//‘__CONTROLLER__‘ => string ‘/thinkphp/index.php/Admin/DengLu‘ (length=32)  //控制器文件夹路径
// ‘__ACTION__‘ => string ‘/thinkphp/index.php/Admin/DengLu/test‘ (length=37)  //找到操作方法

2.跨控制器的调用

跨控制器调用就是在某一个控制器里面写了一个方法,要在每一个页面都拿来用。

例如:新建一个控制器MainController.class.php,控制器的内容如下,里面有一个方法,输出“大苹果商城”。

<?php
namespace Admin\Controller;
use Think\Controller;
class MainController extends Controller
{
    public function showList()
    {
        echo "大苹果商城";
    }
}

?>

在MainController.class.php同一级目录下有一个控制器DengLuController.class.php,要在里面调用MainController.class.php里面的showList方法。调用方法如下:

<?php
namespace Admin\Controller;
use Think\Controller;
class DengLuController extends Controller
{
    public function test()
    {
        //1.造新对象 MainController,调用里面的showList方法。
        //$m = new MainController();
        //$m->showList();
        //2.使用快捷函数A
        //$m = A("Main");//A方法用来实例化控制器对象,控制器前面不加模块名调用的是控制器同级目录下的其它控制器。
        //$m->showList();

        //$m = A("Home/Index");//控制器前面加上模块名,就是调取的其它模块下的控制器
        //$m->test();//Index控制器里面有个test方法,调用此方法。
        //3.使用快捷函数R
        //$m = R("Home/Index/test");//R实例化对象同时调用指定方法,直接写控制器和方法名。
    }
    public function _empty()//当访问空方法时执行这个方法,输出一句话。
    {
        echo "您输入的地址不对";
    }
}

3.生成路径的方法,可以在任意方法里面生成任何方法的路径,之遥前面加上模块名和控制器名即可。

<?php
namespace Admin\Controller;
use Think\Controller;
class DengLuController extends Controller
{
    public function test()
    {
        //快捷函数U方法
        echo U("test");//生成test方法的完整路径。
        echo U("Main/test");//生成Main控制器下test方法的完整路径。
        echo U("Home/Main/test");//生成Home模块下的Main控制器下test方法的完整路径。
    }
    public function _empty()
    {
        echo "您输入的地址不对";
    }
}

?>

4.连接数据库配置及Model数据模型层

(1)修改配置

  做配置要在自己的配置文件里面修改配置,这里是在D:\wamp\www\thinkphp\Application\Admin\Conf\config.php里面修改。将tp框架配置文件D:\wamp\www\thinkphp\ThinkPHP\Conf\convention.php文件里面讲需要修改的配置复制到config.php里面去修改。修改的内容大致如下,配置信息修改成自己的数据库的信息。由于该配置是在Admin模块下,所以只有该模块下的程序代码才可以访问数据库。

/* 数据库设置 */
    ‘DB_TYPE‘               =>  ‘‘,       // 数据库类型
    ‘DB_HOST‘               =>  ‘‘,       // 服务器地址
    ‘DB_NAME‘               =>  ‘‘,       // 数据库名
    ‘DB_USER‘               =>  ‘‘,       // 用户名
    ‘DB_PWD‘                =>  ‘‘,       // 密码
    ‘DB_PORT‘               =>  ‘‘,       // 端口
    ‘DB_PREFIX‘             =>  ‘‘,       // 数据库表前缀
    ‘DB_PARAMS‘              =>  array(), // 数据库连接参数
    ‘DB_DEBUG‘              =>  TRUE,     // 数据库调试模式 开启后可以记录SQL日志
    ‘DB_FIELDS_CACHE‘       =>  true,     // 启用字段缓存
    ‘DB_CHARSET‘            =>  ‘utf8‘,   // 数据库编码默认采用utf8
    ‘DB_DEPLOY_TYPE‘        =>  0,        // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    ‘DB_RW_SEPARATE‘        =>  false,    // 数据库读写是否分离 主从式有效
    ‘DB_MASTER_NUM‘         =>  1,        // 读写分离后 主服务器数量
    ‘DB_SLAVE_NO‘           =>  ‘‘,       // 指定从服务器序号

(2)制作model模型

  a.model本身就是一个类文件

  b.数据库中的每个数据表都对应一个model模型文件。

  c.建立model模型:

  例如如果要访问数据库中的nation表,要现在Admin\Model目录下新建NationModel.class.php文件,文件的内容如下:

<?php
namespace Admin\Model;//命名都要改成Model
use Think\Model;
class Nation extends Model//继承自父类Model
{
    //如果有特殊需求可以在这里写上,正常的话不需要写需求。
}
?>

下面是新建Nation类的三种方法

<?php
namespace Admin\Controller;
use Think\Controller;
class DengLuController extends Controller
{

    public function shuJu()
    {
        //1.new的方式
        //$n = new \Admin\Model\NationModel();//这种方法造的是子类对象
        //var_dump($n);

        //2.使用快捷方式D方法
        //$n = D("Nation");//这种方法造的是父类的对象
        //var_dump($n);

        //3.使用快捷方式M方法
        $n = M("Nation");//这种方法造的是父类的对象
        var_dump($n);
    }

    public function _empty()
    {
        echo "您输入的地址不对";
    }
}
?>

5.命名空间

命名空间相当于虚拟的目录,意思是做一个虚拟的目录,本来A文件夹下放了一个文件aa,用程序写一个文件目录,把aa文件的上一级当成是B文件夹。(文件aa在A文件夹里面,用程序说aa文件在B文件夹里面)。

  TP框架做虚拟空间是为了能够有一个统一的文件夹管理,比如说把类文件都放在同一个文件夹里面,在调用这些类文件时就不需要用include、require来加载这些类文件了,可以试下自动加载。同时,所有的文件命名规则都一样,同时目录都是定死的,就可以使用自动加载类了,就可以直接new 类了。由此可见,TP框架里面使用命名空间的目的主要是为了自动加载类。  

  TP框架下有一个初始命名空间(相当于根目录)
  初始命名空间:ThinkPHP\Library。

  在初始空间命名下又包含很多根命名空间。这些根命名空间主要分两类:

  (1)TP核心类里面的根。在Library目录下所有的文件夹都是根。在写命名空间的时候要从根开始写。

  (2)APP里面的根。APP里面的根是以模块名命名的。

  写类时,用use引入命名空间,例如use Think\Controller,Think是根目录,Controller是父类也是文件名。而在namespace Admin\Controller;中,Controller是真是的文件夹

  

时间: 2024-08-09 17:24:59

thinkphp模型的相关文章

ThinkPHP 模型(Model)命名规范

一个小问题搞了好久:如果数据库的表名中有下划线,那么在用thinkphp做自动完成时注意Model类的命名要变成驼峰法,文件名和类名都要变.( 另外注意:只有使用create方法创建数据时才能调用到自动验证和自动完成 ) ThinkPHP 模型(Model)命名规范 模型命名规范ThinkPHP 对数据库的表名和模型类的命名遵循一定的规范.首先数据库的表名和字段全部采用小写形式,模型类的命名规则是除去表前缀的数据表名称,并且首字母大写,然后加上模型类的后缀定义.一些例子如下:表名(不含前缀)模型

详解thinkphp模型

模型这一块,Think PHP讲解的比较复杂,并且内部做了各种数据库兼容,我认为,虽然它做了这么多的兼容,但是并不代表我们要使用那么多晦涩的用法,事实上,那些用法是降低效率的. ORM:object relational mapping 对象关系映射,以中间件的形式存在. CURD: create update read delete ActiveRecord模式:领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录. 领域模型模式和模型类关系密切,这里

thinkphp模型层

thinkphp想要做模型model,首先要更改一下配置文件:在Home文件夹下的Conf下的config文件中进行修改: 我们可以将convention里边复制一下过来修改: <?php return array( //'配置项'=>'配置值' 'SHOW_PAGE_TRACE' =>true, /* 数据库设置 */ 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost', // 服务器地址 'DB_NAME' =&

TP框架---thinkphp模型

1.获取系统常量信息的方法:在控制器DengLuController里面下写入下面的方法,然后调用该方法. public function test() { //echo "这是测试的" //$this->assign("a","world"); //$this->show(); var_dump(get_defined_constants());//获取系统常量信息.里面加上参数true,就会按照类把所有的信息显示出来. } 系统信

ThinkPHP模型定义

模型类一般位于项目的Lib/Model 目录下面,当我们创建一个UserModel类的时候,其实已经遵循了系统的约定.模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型类的后缀定义Model,例如: 模型名(类名) 约定对应数据表(假设数据库的前缀定义是 think_) UserModel think_user UserTypeModel think_user_type 如果你的规则和上面的系统约定不符合,那么需要设置Model类的数据表名称属性. 在Thin

thinkphp 模型定义

模型定义 模型类并非必须定义,只有当存在独立的业务逻辑或者属性的时候才需要定义. 模型类通常需要继承系统的\Think\Model类或其子类,下面是一个Home\Model\UserModel类的定义: namespace Home\Model; use Think\Model; class UserModel extends Model { } 模型类的作用大多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以自动对应数据表. 模型类的命名规则是除去表前缀的数据表名称

ThinkPHP 模型 - 事务支持

使用事务之前,先确保数据库的存储引擎支持事务操作. MyISAM:不支持事务,主要用于读数据提高性能 InnoDB:支持事务.行级锁和并发 Berkeley DB:支持事务 <?php /** * 事务测试 */ public function transaction() { $modelA = model('A'); $modelA->startTrans(); // 开启事务A $result = $modelA->save($data1); if($result === false

ThinkPHP 模型方法 setInc() 和 setDec() 使用详解

对于数字字段的加减,可以直接使用 setInc() 与 setDec() 方法 ThinkPHP 内置了对统计数据(数字字段)的更新方法: setInc():将数字字段值增加 setDec():将数字字段值减少 setInc() ThinkPHP setInc() 方法将数字字段值增加. 例子: <?php public function update() { header("Content-Type:text/html; charset=utf-8"); $result = M

ThinkPHP 模型方法 getField() 和 select() 使用技巧

getField() 使用技巧 getField() 方法是 ThinkPHP 中用来获取字段值的方法,区别于 select() 和 find() 方法,通常仅用于获取个别字段的值.但是事实上并没有那么简单,该方法的用法总结如下: 获取某个字段值 这个是 getField() 方法最基本的用法,用于获取符合条件的某个字段值. // 实例化User对象 $User = M("User"); // 获取ID为3的用户的昵称 $nickname = $User->where('id=3