Blogger Information
Blog 70
fans 4
comment 5
visits 105120
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP:composer自动加载机制;创建动态分页; 使用三方验证码库;
JiaJieChen
Original
899 people have browsed it

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>
Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post