zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    巴洛克式和哥特式的区别
    推荐阅读书籍,是时候再行动起来了。
    AtCoder ABC 159F Knapsack for All Segments
    AtCoder ABC 159E Dividing Chocolate
    AtCoder ABC 158F Removing Robots
    AtCoder ABC 158E Divisible Substring
    AtCoder ABC 157F Yakiniku Optimization Problem
    AtCoder ABC 157E Simple String Queries
    AtCoder ABC 157D Friend Suggestions
    AtCoder ABC 156F Modularness
  • 原文地址:https://www.cnblogs.com/dashucoding/p/11140266.html
Copyright © 2011-2022 走看看