• PHP全栈学习笔记20


    image

    PHP全栈学习笔记20

    thinkphp概述,thinkphp项目构建流程,thinkphp项目结构,thinkphp配置,thinkphp控制器,thinkphp模型,thinkphp视图,thinkphp的内置模板引擎。

    thinkphp是一个免费开源的,快速,简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了web应用开发和简化企业级引用开发而诞生的。

    thinkPHP的特点,环境要求等。

    官方网址:

    http://thinkphp.cn
    

    svn的下载地址:
    完整版:

    http://thinkphp.googlecode.com/svn/trunk
    

    核心版本:

    http://thinkphp.googlecode.com/svn/trunk/ThinkPHP
    

    thinkphp遵循简单实用的设计原则,thinkphp框架思想和结构体系进行详细的介绍:

    thinkphp的目录结构,自动生成目录,项目目录部署方案,命名规范,项目构建流程。

    thinkphp的目录结构:
    系统目录和项目目录

    系统目录:
    common包含框架的一些公共文件,系统定义和惯例配置等。
    lang目录语言文件。
    lib系统的基类库目录。
    tpl系统的模板目录。
    mode框架模式扩展目录。
    vendor第三方类库目录。

    项目目录:
    index.php项目入口文件
    common项目公共目录
    lang项目语言包目录
    conf项目配置目录
    lib项目基目录
    tpl项目模板目录
    runtime项目运行时目录

    <?php
    define('THINK_PATH','ThinkPHP'); // 定义thinkphp框架路径
    define('APP_NAME', 'test'); // 定义项目名称
    define('APP_PATH', '.'); // 定义项目路径
    require(THINK_PATH."/ThinkPHP.php"); // 加载框架入口文件
    App::run(); // 实例化一个网站应用实例
    ?>
    

    thinkphp自动生成的目录:

    common, conf, lang, lib, runtime, tpl;

    项目目录:

    admin:admin后台管理项目目录
    home:home项目目录
    common:项目公共目录,放置项目公共函数
    conf:项目配置目录,放置配置文件
    lang:项目语言包目录
    lib:项目基目录,通常包括action和model目录
    runtime:项目运行时目录,包括cache,temp,data和log
    tpl:项目模板目录
    thinkphp: thinkPHP系统目录
    admin.php: admin.php网站的后台入口文件
    index.php: index.php网站的入口文件

    分组模块:

    app: app项目目录
    common: 项目公共目录
    conf: 项目配置目录
    lang: 项目语言包目录
    lib: 项目基目录
    runtime: 项目运行时目录
    tpl: 项目模板目录
    public: public网站公共目录
    css: css样式文件夹
    images: 图片文件夹
    js: js脚本文件夹

    thinkphp系统目录
    index.php网站入口文件

    thinkphp创建项目流程:

    创建数据库,数据表,项目命名创建入口文件,项目配置,创建控制类,创建模型类,创建模板文件,运行测试。

    <?php
    return array(
     'APP_DEBUG' => true, // 开启调式模式
     'DB_TYPE' => 'mysql', // 数据库类型
     'DB_HOST' => 'localhost', // 数据库服务器地址
     'DB_NAME' => 'db_database', // 数据库名称
     'DB_USER' => 'root', // 数据库用户名
     'DB_PWD' => 'root', // 数据库命名
     'DB_PORT' => '3306', // 数据库端口
     'DB_PREFIX' => 'think_', // 数据表前缀
    );
    ?>
    
    <?php
    class IndexAction extends Action{
     public function index(){
      $db = new Model('user'); // 实例化模型类,参数数据表名称,不包含前缀
      $select = $db -> select(); // 查询数据
      $this -> assign('select', $select); // 模板变量赋值
      $this -> dispaly('index.html'); // 输出模板
     }
    }
    ?>
    

    模板文件:

    <body>
    <volist name="select" id="user">
    id:{$uer.id}<br/>
    用户名:{$user.user}<br/>
    地址:{$user.address}<hr>
    </volist>
    </body>
    

    thinkphp配置

    配置文件时thinkphp框架程序得以运行的基础文件。

    惯例配置,项目配置,调式配置,分组配置,模块配置,动态操作配置。

    返回PHP数组的方式,所有配置文件的定义格式

    <?php
    return array(
    );
    ?>
    

    进行二维数组进行配置

    <?php
    return array(
    'APP_DEBUG' => true,
     'USER_CONFIG' =>array(
     'USER_AUTH' => true,
     ...
     ),
    );
    ?>
    

    调试配置

    配置文件位于 thinkcommondebug.php
    

    配置文件存储位置,调式配置文件位于项目配置目录下
    系统默认的调试配置文件:
    开启日志记录
    关闭模板缓存
    记录sql日志
    关闭字段缓存
    开启运行时间详细显示
    开启页面trace信息展示
    严格检查文件大小写

    thinkPHP的控制器

    模块类,存储于libaction目录下:
    控制器类必须继承系统的action基础类

    跨模块调用

    $User = A("User"); // 实例化UserAction控制器对象
    $User -> insert(); // 调用User模块的importUser操作方法
    A("User")是一个快捷方法
    等效于:
    import("@.Action.UserAction");
    $User = new UserAction();
    还有比A更好的方法为:
    R("User","insert"); // 远程调用UserAction控制器的insert操作方法
    $User = A("User","Admin"); // 实例化Admin项目的UserAction控制器对象
    $User -> insert(); // 调用Admin项目UserAction控制器的insert操作方法
    R("User", "insert", "Admin"); // 远程调用admin项目的useraction控制器的insert操作方法
    
    <?php
    header("Content-Type:text/html; charset=uft-8"); // 设置页面编码格式
    class IndexAction extends Action {
     public function index() {
      $db = new Model('user'); // 实例化模型类,参数数据表名称,不包括前缀
      $select = $db->select(); // 查询数据
      $this -> assign("select", $select); // 模板变量赋值
      $this -> dispaly(); // 输出模板
     }
    }
    ?>
    
    <?php
    header("Content-Type:text/html; charset=utf-8"); // 设置页面编码格式
    class UserAction extends Action{
     public function insert(){
      $ins = new Model("user"); // 实例化模型类,传递参数为没有前缀的数据表名称
      $ins -> Create(); // 创建数据对象
      $result = $ins -> add(); // 写入数据库
      $this -> redirect('Index/index', '', 5, '页面跳转中'); // 页面重定向
     }
    }
    ?>
    
    <?php
    header("Content-Type:text/html; charset=utf-8"); // 设置页面编码格式
    class IndexAction extends Action{
     public function index() {
      $db = new Model('user'); // 实例化模型类,参数数据表名称,不包含前缀
      $select = $db -> select(); // 查询数据
      $this->assign('select',$select);//模板变量赋值
      $this->display(); // 输出模板
     }
     public function insert(){
      $ins = R("User", "insert", "Admin"); // 远程调用admin项目useraction控制器的insert操作方法
      $ins->Create(); // 创建数据对象
      $result = $ins->add(); // 写入数据库
     }
    }
    ?>
    

    thinkphp的模型

    模型是按照某一个形状进行操作的代名词。
    模型的主要作用就是封装数据库的相关逻辑。
    主要内容:
    模型的命名
    实例化模型
    属性访问
    连接数据库
    创建数据
    连贯操作
    curd操作

    实例化基础模型类

    $User = new Model('User');
    $User -> select();
    
    $User = M('User');
    $User -> select();
    

    m方法默认是实例化model类,如果需要实例化其他模型类:

    $User = M('User', 'CommonModel');
    
    $User = new CommonModel('User');
    

    实例化用户定义的模型类

    // 定义的模型类放到项目libmodel目录下面
    class UserModel extends Model{
     public function myfun() {
      // 。。。
     }
    }
    

    实例化自定义模型类的方式:

    $User = new UserModel();
    $User->select(); // 进行其他的数据操作
    
    $User = D('User');
    $User -> select(); // 进行其他的数据操作
    

    D方法可以自动检测模型类,不存在时系统会抛出异常,同时对于实例化过的模型,不会重复去实例化。

    $User = D('User','Admin'); // 实例化admin项目下面的User模型
    $User->select();
    如果启动模块分组功能,还能使用:
    $User=D('Admin.User');
    

    实例化空模型类

    $Model = new Model();
    // $Model = M();
    $Model -> query('SELECT *FROM think_user where status=1');
    
    <?php
    $User = new Model('User');
    $User -> find(1);
    echo $User -> name;
    $User -> name = 'ThinkPHP';
    ?>
    操作方法是通过返回数组的方式:
    <?php
    $Type=D('Type'); // 返回的type数据是一个数组
    $type= $Type->find(1);
    echo $type['name']; // 获取type属性的值
    $type['name'] = 'ThinkPHP'; // 设置type属性的值
    ?>
    

    连接数据库:
    thinkphp内置抽象数据库访问层,把不同的数据库操作封装起来,只需要使用公共的Db类进行操作。

    <?php
    return array(
    'APP_DEBUG' => false, // 关闭调用模式
    'DB_TYPE' => 'mysql', // 数据库类型
    'DB_HOST' => 'localhost', // 数据库服务器地址
    'DB_NAME' => ‘db_database’, // 数据库名称
    'DB_USER' => 'root', // 数据库用户名
    'DB_PWD' => 'root', // 数据库密码
    'DB_PORT' => '3306'; // 数据库端口
    'DB_PREFIX' => 'think_',
    );
    ?>
    

    连接数据库

    使用dsn方式在初始化db类的时候传参数。

    $db_dsn="mysql://root:admin@127.0.0.1:3306/db_database";//定义dsn
    $db = new Db();// 执行类的实例化
    $conn=$db->getInstance($db_dsn);// 连接数据库
    数组传参
    $dsn = array(
    'dbms' => 'mysql',
    'username' => 'username',
    'password' => 'password',
    'hostname' => 'localhost',
    'hostport' => '3306',
    'database' => 'dbname'
    );
    $db = new Db();
    $conn = $db->getInstance($dsn); // 连接数据库,返回数据库驱动类
    

    模型类里面定义参数:

    protected $connection = array(
     'dbms' => 'mysql',
     'username' => 'username',
     'password' => 'password',
     'hostname' => 'localhost',
     'hostport' => '3306',
     'database' => 'dbname'
    );
    //或者使用下面的方式:
    protected $connection = "mysql://username:password@localhost:3306/DbName";
    

    使用pdo方式连接数据库:

    return array(
     'DB_TYPE' => 'pdo',
     'DB_DSN'=>'mysql:host=localhost;dbname=db_database',
     'DB_USER'=>'root',
     'DB_PWD'=>'root',
     'DB_PREFIX'=>'think_',
     'APP_DEBUG' => false, // 关闭调试模式
    );
    

    自动根据表单数据创建数据对象

    class UserAction extends Action { // 定义类,继承基础类
     public function insert() { // 定义方法
      $ins = new Model('user'); // 实例化模型类
      $ins -> Create(); // 创建数据库
     $result = $ins -> add(); // 写入数据库
     $this-> redirect('Index/index', '', 5, '页面跳转中'); // 页面重定向
     }
    }
    

    curd操作

    thinkphp提供了灵活和方便的数据库操作方法,curd创建,更新,读取,和删除。

    $User = M("User"); // 实例化对象
    $data['name'] = 'ThinkPHP';
    $data['email'] = 'ThinkPHP@gamil.com';
    $User -> add($data);
    $User->data($data)->add();
    

    读取数据的方法:

    读取字段的值使用getField方法
    读取数据使用find方法
    读取数据集使用select方法

    getField方法读取某个字段的值

    $User = M('User');
    $nickname = $User->where('id=3') -> getFielde(‘nickname’);
    $list = $User->getField('id, nickname');
    

    select 方法的返回值是一个二维数组,如果没有查询到如何结果的话,返回一个空的数组

    $User=M('User');
    $list = $User->where('status=1') -> order('create_time') -> limit(10) -> select();
    

    find()方法

    $User = M("User");
    $User->where('status=1 and name="think" ')->find();
    
    <?php
    header("Content-Type: text/html; charset=utf-8"); // 设置页面编码格式
    class IndexAction extends Action{
     public function index(){
      $db=M('User');
      $select = $db->where('user="mr"')->order('id desc')->limit(3)->select();
     $this->assign('select',$select); // 模板变量赋值
     $this->display(); // 指定模板页
     }
     public function insert() {
      $dba = M('User');
      $data['user'] = 'fs';
      $data['pass'] = md5('gdsoft');
      $data['address'] = 'dashu';
      $result = $dba -> add($data);
      if($result) {
       $this->redirect('Index/index', '', 2, '页面跳转中');//页面重定向
      }
     }
    ?>
    
    $User = M("User");
    $data['name'] = 'ThinkPHP';
    $data['email']='ThinkPHP@mail.com';
    $User -> where('id=5') -> save('data');
    
    $User = M('User');
    $User -> where('id=5') -> delete();
    
    $User = M('User');
    $User -> where('status=0') ->order('create_time')->limit('5')->delete();
    

    thinkphp框架的特点

    image.png

    什么是mvc?

    mvc是一种经典的程序设计理念,分3部分:
    模型层,视图层,控制层。

    什么是模型层?
    模型层是应用程序的核心部分,可以是一个实体对象或一种业务逻辑。

    视图层提供应用程序与用户之间的交互界面。

    控制层用于对程序中的请求进行控制。

    什么是CURD?

    C为创建,U为更新,R为读取,D为删除。

    thinkphp使用add(),save(),select(),和delete()

    什么是单一入口?

    自动生成项目目录:

    <?php
    define('THINK_PATH','ThinkPHP'); // 定义ThinkPHP框架路径
    define('APP_NAME', '1'); // 定义项目名称
    define('APP_PATH', '.'); // 定义项目路径
    require(THINK_PATH."/ThinkPHP.php"); // 加载框架入口文件
    App::run(); // 实例化一个网站应用实例
    ?>
    

    项目流程:

    <?php
    define('THINK_PATH', '../ThinkPHP/'); // 定义ThinkPHP框架路径
    define('APP_NAME', '2'); // 定义项目名称和路径
    define('APP_PATH', '.'); // 定义项目名称和路径
    require(THINK_PATH."/ThinkPHP.php"); // 加载框架入口文件
    App::run(); // 实例化一个网站应用实例
    ?>
    

    config.php

    <?php 
    return array(
    	'APP_DEBUG' => true, 		// 开启调试模式
    	'DB_TYPE'=> 'mysql',        // 数据库类型
    	'DB_HOST'=> 'localhost', 	// 数据库服务器地址
    	'DB_NAME'=>'db_database',  		// 数据库名称
    	'DB_USER'=>'root', 			// 数据库用户名
    	'DB_PWD'=>'rot', 				// 数据库密码
    	'DB_PORT'=>'3306', 			// 数据库端口
    	'DB_PREFIX'=>'think_', 		// 数据表前缀
    );
    ?>
    
    <?php
    class IndexAction extends Action{
    	public function index() {
    		$db = new Model('user'); // 实例化模型类,参数数据表名称,不包含前缀
    		$select = $db->select(); // 查询数据
    		$this->assign('select',$select); // 模板变量赋值
    		$this->display(); // 输出模板
    	}
    }
    ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>ThinkPHP开发流程</title>
    </head>
    
    <body>
    <!--循环输出查询结果数据集--> 
    
    <volist name='select' id='user' >
    
    ID:{$user.id}<br/>
    
    用户名:{$user.user}<br/>
    
    地址:{$user.address}<hr>
    
    </volist>
    
    
    </body>
    </html>
    
    <?php
    define('THINK_PATH', '../ThinkPHP');		//定义ThinkPHP框架路径(相对于入口文件)
    define('APP_NAME', '3');				//定义项目名称
    define('APP_PATH', '.');				//定义项目路径
    require(THINK_PATH."/ThinkPHP.php");	//加载框架入口文件 
    App::run();								//实例化一个网站应用实例
    ?>
    

    smarty模板技术

    什么是smarty,特点,模板的安装和配置的方法,设计方法等

    <?php
    	include_once("../config.php");
    	$arr = array('computerbook','name' => 'PHP','unit_price' => array('price' => '¥65.00','unit' => '本'));
    	$smarty->assign('title','使用Smarty读取数组');
    	$smarty->assign('arr',$arr);
    	$smarty->display('02/index.html');
    ?>
    
    <?php
    	include '../config.php';
    	$smarty->assign('title','Smarty保留变量');
    	$smarty->display('03/index.html');
    ?>
    
    <?php
    	include_once '../config.php';
    	$smarty->display('04/index.html');
    ?>
    
    <?php
    	include_once "../config.php";
    	$smarty->assign("title","if条件判断语句");
    	$smarty->display("06/index.html");
    ?>
    

    结言

    好了,欢迎在留言区留言,与大家分享你的经验和心得。

    感谢你学习今天的内容,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给更多的朋友,感谢。

    感谢!承蒙关照!您真诚的赞赏是我前进的最大动力!

    image

    image

  • 相关阅读:
    如何增加按钮的点击间隔时间
    如何增加button的点击范围
    定时器Timer的使用
    NSCache
    GCD和NSOperation的区别
    NSOperation实现线程间通信
    NSOperation添加操作依赖和监听
    自定义NSOperation
    NSOperation的多线程
    单例的实现(完整版代码)
  • 原文地址:https://www.cnblogs.com/dashucoding/p/10798181.html
Copyright © 2020-2023  润新知