tp框架的基本使用(一)

 
 

项目论坛项目前准备工作 1.需求分析 参考discuz开源产品 discuz产品安装后 下一步...需要将数据库用户名密码输入正确 添加一个管理员账号 记住用来登录网站后台的 之后完成 问题: 访问首页没有样式 地址栏输入admin.php 进入后台 工具选项 更新缓存 报错 缺少参数 按报错找到文件指定行将参数加进去 true 再更新缓存 重新访问即可

BUG 用户管理 详情有问题

2.需求分析表 按需求分析表 给大家演示对应模块 需要大家明确需求

3.按需求表进行数据库设计 参考数据字典

4.开始项目 项目使用框架 先将结构搭建出来

5.TP中使用命令行生成目录 需要将php.exe加入到环境变量中

6.开发时编辑器 建议使用sublime 将整个项目放进去 方便查找 也可以使用快捷方式ctrl+p找到指定文件进行编辑

7.解压tp5.1压缩包 到根目录TP5.1的入口文件为:D:\xampp\htdocs\mydiscuz\public\index.php

进行虚拟主机配置(linux位置讲)

    apache配置文件中 D:\xampp\apache\conf 
    确认下面的是打开的
    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf

    按包含地址找到文件使用编辑器打开进行如下配置

    <VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot "D:\xampp\htdocs\mydiscuz\public"
        ServerName www.mydiscuz.com
        ErrorLog "logs/dummy-host2.example.com-error.log"
        CustomLog "logs/dummy-host2.example.com-access.log" common
    </VirtualHost>

    <VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot "D:\xampp\htdocs"
        ServerName localhost
        ErrorLog "logs/dummy-host2.example.com-error.log"
        CustomLog "logs/dummy-host2.example.com-access.log" common
    </VirtualHost>


将DNS域名解析中 先找本机hosts文件 所以在hosts中进行配置
C:\Windows\System32\drivers\etc\hosts

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost
    127.0.0.1       localhost
    127.0.0.1       www.mydiscuz.com

完成后 重启apache服务

在浏览器中输入localhost和www.mydiscuz.com进行测试

8.访问项目

将配置文件中 应用配置文件中 调试模式打开

\config\app.php

// 应用调试模式
'app_debug'              => true
// 是否强制使用路由
'url_route_must'         => true

路由是用于规划(一般同时也会进行简化)请求的访问地址,在访问地址和实际操作方法之间建立一个路由规则 => 路由地址的映射关系。

ThinkPHP并非强制使用路由,如果没有定义路由,则可以直接使用“模块/控制器/操作”的方式访问,如果定义了路由,则该路由对应的路由地址就被不能直接访问了。一旦开启强制路由参数,则必须为每个请求定义路由(包括首页)。

9.项目从后台管理开始入手 准备后台模板 将后台模板放入到项目中

创建后台应用目录 使用命令
>php think build --module admin

在application下生成admin目录

    config---配置
    controller---控制器
    model---模型
    view---视图  html

*路由到模板(V5.1.3)

Route::view('/admin','admin@common/default');

加载模板 admin/view/common/default.html
default.html后台模板首页

通过url地址 /admin 访问  没有样式

后台静态资源资源放置到 public/static
    手动创建admin目录  代表后台模板资源目录 
    public/static/admin
    将后台首页中 css js等资源加载路径调整为
    /static/admin/css/common.css

访问后台测试
/admin

10.后台用户管理模块

根据数据库设计  注意编码问题
创建数据库 discuz
选择数据库
创建用户表 bbs_user
MariaDB [(none)]> create database discuz default charset=utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use discuz;
Database changed
MariaDB [discuz]> create table bbs_user(
    -> id int unsigned primary key auto_increment,
    -> username varchar(32),
    -> password char(32),
    -> qx tinyint unsigned not null default 2,
    -> pic varchar(255),
    -> sex enum('w','m') not null default 'w',
    -> tel char(11),
    -> rtime int unsigned,
    -> rip int
    -> )engine=myisam default charset=utf8;
Query OK, 0 rows affected (0.33 sec)

今天内容 2018-04-27第一节

1.连接数据库
数据库配置文件进行设置 config/database.php

// 数据库类型
'type'            => 'mysql',
// 服务器地址
'hostname'        => '127.0.0.1',
// 数据库名
'database'        => '',
// 用户名
'username'        => 'root',
// 密码
'password'        => '',

将数据库名加上  discuz


2.生成数据模型 m

命令行  创建类库文件

>php think make:model User

application/common/model/User.php

<?php

namespace app\common\model;

use think\Model;

class User extends Model
{
    //
}

模型 -- 定义中
5.1中模型不会自动获取主键名称,必须设置pk属性

<?php

namespace app\common\model;

use think\Model;

class User extends Model
{
    //5.1中模型不会自动获取主键名称,必须设置pk属性
    protected $pk = 'id';

    //设置当前模型对应的完整数据表名称
    protected $table = 'think_user';

}

M 数据表 类文件 V 页面 C 控制器 类文件

11.创建控制器

>php think make:controller admin/UserController
生成application/admin/controller/UserController


<?php

namespace app\admin\controller;

use think\Controller;
use think\Request;

class UserController extends Controller
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        //
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        //
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //
    }
}



index() 浏览用户

用户添加
create() 显示用户表单
save(Request $request) 执行添加


read($id)

用户编辑
edit($id)
update(Request $request, $id)

删除用户
delete($id)





添加用户功能


a.加载表单页面显示

1.先定义路由规则
            地址                  模块/控制器/方法

Route::rule('/user/create', 'admin/UserController/create'); 

2.使用url访问到此方法
   public function create()
    {
        //显示添加用户表单
        return view('user/create');
    }

3.admin/view/创建user/create.html 继承 common中的default
首先在default中将要继承的部分定义出来
{block name="main"}
    default被重写的部分

{/block}


{extend name="common/default"}
{block name="main"}
    后台添加模板加入这里

{/block}



4.将添加模板页表单进行修改

Action=”/user/save”
Method=”post”

表单项名称与数据表字段名称对应


上面第一节


第二节

5.设置保存路由
Route::rule(‘/user/save’, ‘admin/UserController/save’);

6.接收数据 进行验证  进行存储  TP中 打印dump();

注意使用User类中的方法 当前空间中没有需要加上
Use app\common\model\User;

 public function save(Request $request)
    {
        //获取表单数据
        $form_data = $request -> post();
        //dump($form_data);
        //判断密码是否为空
        if (empty($form_data['password'])) {
            return $this -> error('密码不能为空', '/user/create');
        }
        //判断两次密码是否一致
        //加密密码
        $form_data['password'] = md5($form_data['password']);

        $form_data['rtime'] = time();
        $form_data['rip'] = ip2long($_SERVER['REMOTE_ADDR']);
        //dump($form_data);

        try {
        //执行用户添加 true代表过滤表单中不在数据表中的字段
            User::create($form_data, true);
        } catch(\Exception $e) {
            return $this -> error('添加用户失败', '/user/create');
        }

        return $this -> success('添加用户成功', '/user/create');

}

二、浏览用户 index()

设置路由
Route::rule(‘/user/index’, ‘admin/UserController/index’);


获取数据  显示到模板
public function index()
    {
        //获取用户表中所有数据
        $users = User::select();
        dump($users);

        //显示渲染模板
        return view('user/index');

    }

创建模板 view/user/index.html

{extend name=”common/default”}
{block name=”main”}
后台模板design.html中的main主体部分放到这里
{/block}

修改模板

将数据显示到模板中
//显示渲染模板 将数据分配到模板中第二个参数
 return view('user/index', ['users' => $users]);

在模板中使用模板操作方式 遍历数据
{foreach $users as $k => $v}
{$v.id}
{/foreach}

模板中判断语法
{switch 变量 }
    {case value1 }输出内容1{/case}
    {case value2}输出内容2{/case}
    {default /}默认情况
{/switch}

{if 表达式}value1
{elseif 表达式 /}value2
{else /}value3
{/if}

使用函数
{$data.name|md5} 

第三节 用户删除

三、删除用户 Delete();

模板
<a class="link-del" href="/user/delete/{$v.id}">删除</a>

路由传值
Route::rule('/user/delete/:id', 'admin/UserController/delete');


/**
 * 删除指定资源
 *
 * @param  int  $id
 * @return \think\Response
 */
public function delete($id)
{
    //参数$id与路由中传的参数名称对应
    //dump($id);
    //返回受影响行数
    $row = User::destroy($id);
    if ($row) {
        return $this -> success('删除成功', '/user/index');
    } else {
        return $this -> error('删除失败', '/user/index');
    }
}

第三节结束

四、修改用户

1.模板文件
<a class="link-update" href="/user/edit/{$v.id}">修改</a>
2.路由传值
Route::rule('/user/edit/:id', 'admin/UserController/edit');

3.控制器 edit($id)
获取值id 根据id获取数据  分配到模板显示
        //通过id获取数据
        $user = User::get($id);
        //将数据显示到表单中
        return view('/user/edit', [‘user’ => $user]);
4.创建edit模板 表单可以使用create时的表单

{$user.id}

点击表单提交进行修改 

5.路由设置
Route::rule('/user/update/:uid', 'admin/UserController/update');

6.控制器
update(Request $request, $uid)
Request 获取post方式提交的数据
$uid 与路由传过来的参数名称对应

public function update(Request $request, $uid)
    {
        //获取要修改的数据Id
        //dump($id);
        $form_data = $request -> post();

        try {
            User::update($form_data, ['id' => $uid], true);
        } catch(\Exception $e){
            return $this -> error('修改失败', '/user/edit/'.$uid);
        }
        return $this -> success("修改成功", "/user/index");

}

五、多条件搜索

用户浏览页面 /user/index

页面修改搜索表单
提交地址:/user/index
提交方式:get

public function index(Request $request)
    //dump($request -> get('sex'));
    //定义空数组 存放查询条件
    $condition = [];

    //判断用户是否按性别查询
    if ($sex = $request -> get('sex')) {
        $condition[] = ['sex', '=', $sex];
    }

    //判断用户是否按用户名查询
    if ($username = $request -> get('username')) {
        $condition[] = ['username', 'like', "%{$username}%"];
    }


    //获取用户表中所有数据
    $users = User::where($condition) -> select();

六、分页

    $users = User::where($condition) -> paginate(3);
    //dump($users);

    //获取分页字符串
    $page_string = $users -> render();

    //dump($page_string);

    //显示渲染模板 将数据分配到模板中
    return view('user/index', ['users' => $users, 'page_string' => $page_string]);

    {$page_string|raw} 默认转义使用raw不转义

七、搜索和分页关联

 $users = User::where($condition) -> paginate(3) -> appends($request->get());

友情链接图片

1. 接收上传文件

$file = $request -> file(‘pic’);

$finfo = $file -> move( config(‘app.save_path’) );

$filename = $finfo->getSaveName();

$form_data[‘pic’] = $filename;


猜你喜欢

转载自blog.csdn.net/z_c_z_/article/details/80171197