thinkphp_3.2.1

心得体会:多理解编程思想、多查阅api文档、项目架构、如何设计php

想一想以前的学习方法简直太死板了,眼见不开阔,跟牛人接触的太少了,本身闷葫芦写的乱七八糟!!重要的是眼见思想,有了总体的思路之后其余东西均可以查阅!html

 

zend studio的安装,直接在官网上下载,破解注册码方法见网盘安装包mysql

1.使用框架sql

在http://www.thinkphp.cn/下载须要框架。thinkphp

在zend studio下建立localphpproject 文件-》保存地址为AppServ\www\project2(这样能够用localhost访问)-》删除index.php文件-》将下载的框架文件复制到项目里面(这里会string.class会报错,直接把string 改革名字就行)数据库

导入项目:import->general->existing projects into workspaceapache

浏览器访问:http://localhost:8080/project2/demo1_thinkphp_3.2.1/编程

 

报错: overlaps the location of another project: 'xxxx'api

建立工做路径的时候要和建立localphp project文件保存的文件路径一致数组

 

2.模块化配置前台和后台

先在index.php下定义应用目录做为应用程序入口(前台吗?)-》打开网页刷新-》点击编辑器刷新

// 定义应用目录
define('APP_PATH','./WeiBo/');

在生成的weibo目录下新建文件夹Admin->直接将Home文件夹复制再更名就能够了

再将Admin 下IndexController.class.php的命名空间改成

Admin\Controller

 

<?php
// 本类由系统自动生成,仅供测试用途
namespace Admin\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
	echo "houtai ";

    }
}

 

admin做为后台?home做为前台?

这样就实现了先后台模块化,公共使用核心配置文件

3.导入乱码

properties->resource->other->Utf-8

 

4.url用户密码传递实例

如何调用操做:pathinfo:localhost/demo39/index.php/模块/控制器/操做

eg.

UserController.class

 

public function user($user,$pass){
      
        echo 'user';
      
    }

 

 

 

url传递值

http://localhost:8080/project2/demo1_thinkphp_3.2.1/index.php/Home/User/user/user/admin/pass/123


或者

http://localhost:8080/project2/demo1_thinkphp_3.2.1/index.php?m=Home&c=User&a=user&user=leo&pass=123

 

5.URL重写(参看手册:部署-》URL重写)

 

能够经过URL重写隐藏应用的入口文件index.php,下面是相关服务器的配置参考:

[ Apache ]

  1. httpd.conf配置文件中加载了mod_rewrite.so模块
  2. AllowOverride None 将None改成 All
  3. 把下面的内容保存为.htaccess文件放到应用入口文件的同级目录下
 
  1. <IfModule mod_rewrite.c>
  2. RewriteEngine on
  3. RewriteCond %{REQUEST_FILENAME} !-d
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
  6. </IfModule>

 

6.没法启动服务器界面???

services.msc中apache stop->start

 

7.没法链接数据库??

这里真是血与泪的教训啊!

 

 'DB_HOST'=>'localhost',  这里不能写端口啊!!!

 

8.加入调试分析

Common/Conf/config.php

  //页面TRACE
    'SHOW_PAGE_TRACE'=>true,
    
   
9.数据库的链接配置

数据库及数据库里面的表都要实现创建好,而后才在zend里面配置链接

url:localhost/phpMyadmin

(1)数据库的全局化定义

Common/Conf/config.php

两种不一样方式

 

//mysql全局定义
        'DB_TYPE'=>'mysql',
        'DB_HOST'=>'localhost',
        'DB_USER'=>'root',
        'DB_PWD'=>'123456789',
        'DB_PORT'=>'3306',
        'DB_NAME'=>'thinkphp',
        'DB_PREFIX'=>'think_',
 //PDO专用定义
    'DB_TYPE'=>'pdo',
    'DB_USER'=>'root',
    'DB_PWD'=>'123456789',
    'DB_PREFIX'=>'think_',  //表前缀,在数据库中代表是这样的 : think_user
    'DB_DSN'=>'mysql:host=localhost;dbname=thinkphp;charset=UTF8',

//配置的时候就已经选择了链接的数据库名称和创建的表前缀,固然这都须要在数据库里面建立好

 

 

(2)链接

Home/Controller/UserController.class

对应四种方法

 

public function model(){
         //建立model基类,传递user表,think_user
         //Model能够传递三个参数:表名、表前缀、数据库信息
       (1) //$user=new Model('User');  //链接数据库
       (2)// $user=M('User');  //推荐
       (3) //$user=new UserModel();
       (4)// $user=D('User');  //支持跨模块实例化:Admin/User

 

 

 

第三种方法在Home/Model建立UserModel.class.php

 

<?php
namespace Home\Model;

use Think\Model;
class UserModel extends Model{
 /*    //更改表前缀
    protected  $tablePrefix='tp_';
     //不包含前缀的数据表名称
     protected $tableName='abc';
     //更改前缀加表名
     protected  $trueTableName='tp_abc';
      */
    
    public  function __construct(){
        parent::__construct();
        echo '\home';
        
    }
}

 

 

 

 

 

10.sql

(1)查询

字符串

M为没有前缀的数据表名

$user=M('User');
       //字符串查询
       //var_dump($user->where('id =1 and user="蜡笔小新"')->select());

索引数组做为条件查询

 

/*  $condition['id']=1;
       $condition['user']='蜡笔小新';
       $condition['_logic']='or';
       var_dump($user->where($condition)->select()); */

 对象查询,在PHP根目录下寻找内置类

 

 

$condition=new \stdClass();
      $condition->id=1;
      $condition->user='蜡笔小新'; 
  var_dump($user->where($condition)->select());

 

(2)表达式查询

 

eg.

 

(3)快捷查询

(4)区间查询

(5)组合查询

(6)统计查询

(7)动态查询

数据表的导入导出

 

12.SQL连贯操做(大概就是php语句下的sql语句查询)

这些语句都要在配置好数据库以后入口文件的Home/User/model方法下写

能够在开发手册 模型-》连贯操做下查到

 


13.CURD操做

(1)用到静态html文件,安装aptana插件?

http://mrthink.net/zend-studio-aptana-tips/

 

(2)数据建立

在工程文件下新建index.html文件

<meta charset="UTF-8">
<form method="post" action="http://localhost:8080/project2/demo1_thinkphp_3.2.1/Home/User/create">
<p>标志:<input type="text" name="name"/></p>
<p>标题:<input type="text" name="title"/></p>
<input type="submit" value="提交"/>

</form>

注意默认提交方法为post,若为get则接收方式有差别,action指向接受数据建立数据的方法中

 

Home/User/create方法:

/**
      * 数据建立,数据提交的结果就是提交的POST的键值对
      */
     public function create(){
         $user=M('category');  //除去前缀外的名字
         //为何须要User来进行create?并非数据库里面的数据啊
         var_dump($user->create()); //经过表单提交的时候默认已经构造好了一个$data对象,也能够本身手动建立
         $user->add();
         
         
     }

create()为建立数据源,这里是直接接受post提交过来的数据,是一个数组,可是尚未添加到数据库,这里还有其余几种建立数据源的方式,在api文档中能够查到。

add()是将数据保存到数据库。

tips:

接受post提交的数据对象

       $data['user']=$_POST['user'];

按必定规则获取日期数据

$data->date=data('Y-m-d H:i:s');

 

若index.html文件改成get方式提交数据,由于默认是post方式,因此在接收时须要作以下改变


         var_dump($user->create($_GET));

支持一系列连贯操做

 

(3)数据写入

使用add方法

若是在add以前已经建立数据对象的话(例如使用了create或者data方法),add方法就不须要再传入数据了。

 

支持一系列的连贯操做,来对所写数据加入限制条件

 

(4)数据读取

 

读取中find()和select()方法有何不一样?

find 方法:查询符合条件的第一条数据。
select 方法:查询符合条件的全部数据。

配合查询时候一系列连贯操做实现

 

读取字段值(相似于限制读取字段)

  1. // 获取ID为3的用户的昵称
  2. $nickname = $User->where('id=3')->getField('nickname');

 

(5)数据更新

 

 

 

个人妈,竟然被一个狗屁问题困扰一半天,在写路径的时候因为事先没有隐藏入口文件,在打url的时候就一直忽略了打Index.php,我在没有更爱前缀的状况下一直在改

http://localhost:8080/project2/demo1_thinkphp_3.2.1/index.php/Home/User

 


14.视图

这个视图好像就至关于mvc里面的v,参看 开发手册上面的视图

好比在Home目录下的控制器User中

<?php
// 本类由系统自动生成,仅供测试用途
namespace Home\Controller;
use Think\Controller;

class UserController extends Controller {
    public function index(){
        
        $this->assign('name','labixiaoxin');
       $this->display();
    }    

}

display就是渲染出相应的view中的内容,因此须要在View->新建User文件夹-》新建对应的Index.html文件。。这里就对应上面controller里面的渲染输出的内容。

 

路径相关后缀均可以调整的哈


15.模板

就是视图里里面辅助输出的数据

变量输出

 


16.控制器

 

url访问

http://localhost:8080/project2/demo1_thinkphp_3.2.1/Home/User

项目名称/模块(Home)/User(控制器名称)--》这个直接就是默认访问该名字的控制器(一级)

若是是二级控制器,则为

http://localhost:8080/project2/demo1_thinkphp_3.2.1/Home/Member/User

项目名称/模块(Home)/Member(控制器二级文件夹名称)/User(控制器名称)--》这个直接就是默认访问该名字的控制器(一级)

 

分层控制器:是与Controller控制器同级别的其余控制器

访问时
  1. Home\Event\UserEvent

分级控制器:是在Controller控制器下面的控制器子文件

 

彷佛多级控制器就是没有效果

(1)控制器的名称采用驼峰命名法

ome/Controller/IndexController.class.php

这种首字母大写 而且在名称后面加上Controller的命名方法,能够在url引用的时候直接引用controller前面的名字便可

http://serverName/index.php/Home/Index/

Index其实就是指明了IndexController这个控制器

 

(2)设置操做方法后缀

'ACTION_SUFFIX' => 'Action', // 操做方法后缀

 

(3)多级控制器

  'CONTROLLER_LEVEL' => 2,

 

(4)实例化控制器

提供跨模块访问方法

  1. // 实例化Home模块的User控制器
  2. $User = new \Home\Controller\UserController();

或采用快捷调用方法A

  1. $User = A('User');
  2. $Blog = A('Admin/Blog');

 

(5) 前置和后置操做

是在执行某个操做方法以前和以后会自动调用的方法

 
  1. public function _before_index()
  2. public function _after_index()

 

(6)输入变量

I('变量类型.变量名/修饰符',['默认值'],['过滤方法'],['额外数据源'])
// 采用htmlspecialchars方法对$_GET['name'] 进行过滤,若是不存在则返回空字符串
    echo I('get.name','','htmlspecialchars');

 

param变量类型是框架特有的支持自动判断当前请求类型的变量获取方式,例如:

echo I('param.id');

I方法的第三个参数若是传入函数名,则表示调用该函数对变量进行过滤并返回 (在变量是数组的状况下自动使用array_map进行过滤处理),不然会调用PHP内置的filter_var方法进行过滤处理,..

filter_var() 函数经过指定的过滤器过滤变量。

语法

filter_var(variable, filter, options)

 

path类型变量能够用于获取URL参数

变量过滤

  • 变量修饰符:强制转换为某数据类型

用法以下: I('变量类型.变量名/修饰符');

 

(7)请求类型: 须要判断当前操做的请求类型是GET 、POST 、PUT或 DELETE

(8)空操做: 指系统在找不到请求的操做方法的时候,会定位到空操做(_empty)方法来执行,利用这个机制

 

在url传递参数的时候,能够不输入须要的操做方法,直接就定位到_empty()方法内

(9)空控制器

指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制咱们能够用来定制错误页面和进行URL的优化。

url:http://serverName/index.php/Home/shanghai/

根据当前控制器名字大概就是把ShangHai这个本来应该是控制器名称的地方由参数这个东西伪装取代。

<?php
    namespace Home\Controller;
    use Think\Controller;
    class EmptyController extends Controller{
        public function index(){
            //根据当前控制器名来判断要执行那个城市的操做
            $cityName = CONTROLLER_NAME;
            $this->city($cityName);
        }
        //注意 city方法 自己是 protected 方法
        protected function city($name){
            //和$name这个城市相关的处理
             echo '当前城市' . $name;
        }
    }

 

 

(10)插件控制器

经过在url中加入插件控制器变量的方法,会自动定位到插件控制器中的操做方法。

  • 设置(默认):
VAR_ADDON'    =>    'plugin'
  • 设置url

插件控制器的变量由参数 VAR_ADDON 进行设置,默认为addon,例如咱们在URL中传入: http://serverName/Home/info/index/addon/SystemInfo

则实际定位到的是

Home/Addon/SystemInfo/Controller/InfoController.class.php

相关文章
相关标签/搜索