1c7 / VideoList

:us: -> :cn: @糖醋陈皮 翻译的视频列表
https://weibo.com/2004104451
57 stars 11 forks source link

ThinkPHP - 30 分钟入门 #81

Closed 1c7 closed 8 years ago

1c7 commented 8 years ago

写于 2015-10-27 这里用的版本是 TP 3.2

重要概念

  1. TP 有各种单字母方法
  2. TP 用了 MVC



笔记

1. Application 目录一开始是空的,当你第一次访问之后就会自动生成 N 多文件夹和文件在里面



2. 读取配置用 "C" 函数(就1个字母)

$model = C('URL_MODEL');



3. 我们可以在自动生成的 Application/Home/Controller 目录下面

找到一个 IndexController.class.php 文件,这就是默认的 Index 控制器文件。



5. 新建 Contrller

Application\Home\Controller 下新建文件HahaController.class.php

然后文件内容是

<?php
namespace Home\Controller;
use Think\Controller;
class HahaController extends Controller {
    public function index(){
        echo 'tell me why ,,oho...';
    }
}

现在访问

http://localhost/thinkphp_3.2.3_full/index.php/Home/Haha/index

可以看到 index.php 后面第一节是目录名,第二节是 Controller 名,第三节是方法名



6. 前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效。



7. 模板文件都在 Application/Home/View 目录里。



7. 在 Controller 里如何调用 View?

短答案:调用 $this->display(); 即可,然后 TP 会去按照默认规则去对应目录里找对应文件

长答案: 比如你现在在 HahaController.class.php

文件内容如下:

<?php
namespace Home\Controller;
use Think\Controller;
class HahaController extends Controller {
    public function index(){
        echo 'tell me why ,,oho...';
        __$this->display();__
    }
}

注意你是在 haha 控制器下面的 index() 方法里调用的 $this->display(); 所以 TP 会找 Application/Home/View/HAHA/index.html 可以看到控制器名字变成了目录,方法名变成了文件名。

控制器名 -> 目录名 方法名 -> 文件名

(这个在我这边能用,文件夹大小写不重要)



9. GET POST 有三种方式

  1. I 方法 (3.1.3 之后新增的)
  2. $this->_get("id")(3.1.3版之前建议用这个)
  3. 原生 $_GET['id']


1. I 方法

http://www.thinkphp.cn/document/308.html

我们以GET变量类型为例,说明下I方法的使用:

echo I('get.id'); // 相当于 $_GET['id']
echo I('get.name'); // 相当于 $_GET['name']

支持默认值:

echo I('get.id',0); // 如果不存在$_GET['id'] 则返回0
echo I('get.name',''); // 如果不存在$_GET['name'] 则返回空字符串


2. $this->_get("id")
$id = $this->_get('id'); // 获取get变量
$name = $this->_post('name'); // 获取post变量
$value = $this->_session('var'); // 获取session变量
$name = $this->_cookie('name'); // 获取cookie变量
$file =  $this->_server('PHP_SELF'); // 获取server变量

如果没有就会是空



7. TP 有各种单字母方法

文件位置 ThinkPHP \ Common \ functions.php E 方法 抛出异常 L 方法 获取和设置语言定义 T 方法 获取模板文件 N 方法 设置和获取统计数据 M 方法 实例化一个没有模型文件的Model D 方法 实例化模型类



7. Cookie Session



4. Common 目录里有个 function.php

可以写一些公用的函数在里面,相同模块的控制器都能用。

文档里的相应位置:"模块化设计" Common模块是一个特殊的模块,是应用的公共模块,访问所有的模块之前都会首先加载公共模块下面的配置文件(Conf/config.php)和公共函数文件(Common/function.php)。但Common模块本身不能通过URL直接访问,公共模块的其他文件则可以被其他模块继承或者调用。



1c7 commented 8 years ago

下面这个例子把数据库增删改查都展示了

用了 M 方法 还测了 COOKIE SESSION

<?php
namespace Home\Controller;
use Think\Controller;

/*
    数据库

    CREATE TABLE user(
        id int unsigned auto_increment,
        name varchar(200),
        age varchar(200),
        birthday varchar(200),
        primary key(id)
    )DEFAULT CHARSET = "utf8";

    INSERT INTO `user`(`name`, `age`, `birthday`) values(11001, 22002, 33002);
    INSERT INTO `user`(`name`, `age`, `birthday`) values('哈哈', '不吃早餐', '黑鸭黑鸭');

*/

class HahaController extends Controller {

    // http://localhost/thinkphp_3.2.3_full/index.php/Home/Haha/index
    public function index(){
        echo 'tell me why ,,oho...';

    }

    // http://localhost/thinkphp_3.2.3_full/index.php/Home/Haha/cookie_session
    // Thinkphp Session: http://www.thinkphp.cn/document/137.html (全在里面)
    // Cookies:
    function cookie_session(){
        cookie('asd','dsa');

        // session('nice', 'really');
        // 设置一个 session

        // session('nice', null);
        // 干掉一个 session

        // session(null);
        // 干掉所有 session

        echo '------------------worked---------------';
    }

    // http://localhost/thinkphp_3.2.3_full/index.php/Home/Haha/display_all_session
    function display_all_session(){
        var_dump($_SESSION);
    }

    // http://localhost/thinkphp_3.2.3_full/index.php/Home/Haha/display_all_cookie
    function display_all_cookie(){
        var_dump($_COOKIE);
    }

    // 下面这些什么 Model_query 和 model_update 名字是随意的

    // http://localhost/thinkphp_3.2.3_full/index.php/Home/Haha/Model_query
    public function Model_query(){
        // header("content:type/////")
        echo 'this should work';
        $user = M('user');
        // 会去数据库里找对应的 user 表
        // var_dump($user);
        dump( $user->select());

        // print_r($b);
        // $a = $user->where('age > 1')->limit(2)->select();
        // $a = $user->where('age > 1')->field('age')->limit(2)->select();
        // var_dump($a);
        // 输出所有数据

        }

        // 增
        // http://localhost/thinkphp_3.2.3_full/index.php/Home/Haha/model_create
        function model_create(){
            $user = M('user');
            $data['name'] = '测试哈哈哈哈223333333';
            $data['age'] = '测试哈哈哈444422';
            $user->data($data)->add();
            echo '新增数据成功~';
        }

        // 改
        // http://localhost/thinkphp_3.2.3_full/index.php/Home/Haha/model_update
        function model_update(){
            $user = M('user');
            $user->name = 'ThinkPHP';
            $user->email = 'ThinkPHP@gmail.com';
            $user->where('id=1')->save(); // 根据条件更新记录
            // 对于没有的字段也不会报错, 比如 email
            echo 'update success';
        }

        // 删
        // http://localhost/thinkphp_3.2.3_full/index.php/Home/Haha/model_del
        function model_del(){
            $user = M('user');
            $user->where('id=2')->delete();
            echo 'asdasd';

        }

}