博主信息
JiaJieChen
博文
66
粉丝
3
评论
5
访问量
46809
积分:0
P豆:134

PHP:composer自动加载机制;创建动态分页; 使用三方验证码库;

2021年05月26日 18:41:18阅读数:323博客 / JiaJieChen/ PHP

PHP:composer自动加载机制;创建动态分页; 使用三方验证码库;

一.使用第三方验证码库

代码块

<?php//首先开启session会话session_start();//然后引入第三方验证码的自动加载文件require_once __DIR__ . '/vendor/autoload.php';use Gregwar\Captcha\CaptchaBuilder;$builder = new CaptchaBuilder;$builder->build()->save('captcha.jpg');?><!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>验证码验证</title></head><body>    <input type="text" name="captcha" >    <img src="<?php echo $builder->inline(); ?>" alt="" onclick="window.location.reload()"></body></html>

二.composer自动加载机制

  • psr-4规范 : 类的命名空间与类所在的目录进行绑定,命名空间最后必须以”\” 空间分隔符结尾 ,往绑定的目录中添加新类时, 不必执行composer dump-autoload命令就能生效

    • 这里先介绍psr4,他是升级版的PSR-0自动加载规范
      PSR4是关于由文件路径自动载入对应的类的相关规范,本规范是可互操作的。可以作为任一自动(包括PSR-0)载入规范的补充,此外,PSR4还包括自动载入的类对应的文件存放路径规范。

    • 此处的“类”泛指所有的class类、接口、traits可复用代码块以及其他类似结构。

    • 一个完整的类名需要具有以下结构
      <命名空间>(<子命名空间>)*<类名>

    • 完整的类名必须要有一个顶级命名空间,被称为“Vendor namespace”

    • 完整的类名可以有一个或多个子命名空间

    • 完整的类名必须有一个最终的类名

    • 完整的类名中任意一部分中的下划线都是没有特殊意义的

    • 完整的类名可以由任意大小写字母组成

    • 所有类名都必须是大小写敏感的

    • 当根据完整的类名载入相应的文件

    • 完整的类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,作为“命名空间前缀”,其必须至少对应一个基础目录。

    • 紧接命名空间前缀后的子命名空间必须与相对应的“基础目录”的子目录相匹配,其中的命名空间分隔符作为目录分割符

    • 末尾的类名必须与对应的.php为后缀的文件同名

    • 自动加载器(autoload)的实现一定不能抛出异常,一定不能触发任一级别的错误信息以及不应该有返回值。

①配置composer.json文件 添加 autoload自动加载器

②在终端调用 composer dump-autoload 命令让改动的文件生效

composer 自动加载 配置成功

composer.json文件代码块

{  "name": "phpcn/login",  "description": "a exquisite login page with captcha",  "type": "project",  "require": {    "gregwar/captcha": "^1.1"  },  "authors": [    {    }  ],  "autoload": {    "psr-4": {      "app\\controller\\": "app/controller",      "extend\\ilb\\": "extend/ilb"    }  }}

三.创建动态分页

①基础动态分页

php代码块

<?php// 连接数据库$pdo = new PDO("mysql:host=localhost;dbname=zwz","zwz1230","a123456",[PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]);//获取分页数据//当前页码 默认为1$page = $_GET['p']??1;//每页显示条数$num = 4;//计算每一页第一条记录的显示偏移量//偏移量 = (页码 -1) \* 每页的显示数量$offset = ($page - 1) * $num ;//获取数据库数据$sql = "SELECT `id`,`uname` FROM `user` ORDER BY `id` ASC  LIMIT {$num} OFFSET {$offset}";$users = $pdo->query($sql)->fetchAll();//获取总页数$sql = "SELECT CEIL(COUNT(`id`)/{$num}) AS `total` FROM `user`";$pages = $pdo->query($sql)->fetch()['total'];

HTML代码块

<body>    <table>        <caption>用户表</caption>        <thead>        <tr>            <td>编号</td>            <td>姓名</td>            <td>操作</td>        </tr>        </thead>        <tbody>        <!-- 遍历数据表中数据 -->        <?php foreach ($users as $key => $user):?>            <tr>                <td><?= $user['id']?></td>                <td><?= $user['uname']?></td>                <td>                <button>删除</button>                <button>编辑</button>                </td>            </tr>        <?php endforeach ;?>        </tbody>    </table>     <!-- 动态生成分页条  跳转地址 当前页码的高亮显示 -->     <p>        <?php        for ($i=1; $i <= $pages ; $i++) :        //生成动态的跳转地址 a href 属性 $jump        $jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$i);        //添加css样式实现页码高亮显示        $active = ($i==$page) ? "active" : null;        ?>        <a class="<?=$active?>" href="<?=$jump?>"><?=$i?></a>        <?php endfor;?></p></body>

②省略点动态分页

php代码块

//省略点分页// 讨论省略点分页    前提: 两边的省略点都出现的时候// 分页条显示的页数$showPages = 3;//分页条开始的页码值$startPage = 1;//分页条结束的页码值$endPage = $pages;//分页条的终止页码相对于当前页码的偏移量:$offset = ($showPages-1)/2;//如果当前显示的页数小于总页数则显示省略点if ($showPages < $pages) {    //如果当前页数大于偏移量+1则显示省略点    if ($page > $offset +1) {        //设置省略点        $startOmit = '...';        //重置开始页码和结束页码        $startPage = $page - $offset;        $endPage = $page -$offset;        //结束页码如果大于总页码则结束页码等于总页码        if ($endPage > $pages) {           $endPage = $pages;        }    }else {        $startPage = 1;        $endPage = $showPages;    }    //如果分页条显示数小于总页数    //或者当前页数+偏移量 小于总页数 则显示结束省略点    if ($showPages < $pages  && $page + $offset <$pages) {        $endOmit = '...';    }}

HTML代码块

<body>    <table>        <caption>用户表</caption>        <thead>        <tr>            <td>编号</td>            <td>姓名</td>            <td>操作</td>        </tr>        </thead>        <tbody>        <!-- 遍历数据表中数据 -->        <?php foreach ($users as $key => $user):?>            <tr>                <td><?= $user['id']?></td>                <td><?= $user['uname']?></td>                <td>                <button>删除</button>                <button>编辑</button>                </td>            </tr>        <?php endforeach ;?>        </tbody>    </table>     <!-- 动态生成分页条  跳转地址 当前页码的高亮显示 -->     <p>        <!-- 首页  上一页 -->        <?php          $prev = $page - 1;          if ($page ==1) $prev = 1;          if ($page != 1):        ?>        <a href="<?=$_SERVER['PHP_SELF'].'?p=1'?>">首页</a>        <a href="<?=$_SERVER['PHP_SELF'].'?p='.$prev?>">上一页</a>        <?endif;?>        <!-- 省略点 -->        <?php if (isset($startOmit)):?>        <a href="javascript:;"><?=$startOmit?></a>        <?endif;?>        <?php        for ($i=1; $i <= $pages ; $i++) :        //生成动态的跳转地址 a href 属性 $jump        $jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$i);        //添加css样式实现页码高亮显示        $active = ($i==$page) ? "active" : null;        ?>        <a class="<?=$active?>" href="<?=$jump?>"><?=$i?></a>        <?php endfor;?>          <!-- 省略点 -->        <?php if (isset($endOmit)):?>        <a href="javascript:;"><?=$endOmit?></a>        <?endif;?>        <!-- 尾页 下一页 -->        <?php          $next = $page + 1;          if ($page == $pages) $next = $page;          if ($page != $pages):        ?>        <a href="<?=$_SERVER['PHP_SELF'].'?p='.$next?>">下一页</a>        <a href="<?=$_SERVER['PHP_SELF'].'?p='.$pages?>">尾页</a>        <?endif;?></p></body>
批改状态:未批改

老师批语:

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论