ASCII码 ASCII码

curl扩展服务器通讯与mvc小框架实现

发布于:2022-02-27 11:22:24  栏目:技术文档

使用curl实现生肖查询

一个简单的curl功能,代码如下

  1. <?php
  2. $playeryear = isset($_POST['year']) ? $_POST['year'] : `1990-06-05`;
  3. //聚合请求网址
  4. $url = 'http://apis.juhe.cn/fapig/zodiac/query?';
  5. //个人key
  6. $key ='d188b2c2ab1a8e37f8b819951c2a26b3';
  7. //测试年月日
  8. $keyword='1990-06-05';
  9. $param=http_build_query(['key'=>$key,'keyword'=>$keyword]);
  10. $handle=curl_init();
  11. curl_setopt($handle,CURLOPT_URL,$url . $param);
  12. curl_setopt($handle,CURLOPT_HEADER,false);
  13. curl_setopt($handle,CURLOPT_RETURNTRANSFER,true);
  14. $res=curl_exec($handle);
  15. $apidata = json_decode($res, true);
  16. curl_close($handle);
  17. $desc=$apidata['result'];
  18. //var_dump($desc);
  19. extract($desc);
  20. //echo $name;
  21. ?>
  22. <!DOCTYPE html>
  23. <html lang="en">
  24. <head>
  25. <meta charset="UTF-8">
  26. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  27. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  28. <title>Document</title>
  29. </head>
  30. <body>
  31. <form action="moon.php" method="post" id="search">
  32. <fieldset class="login">
  33. <legend>请输入年月日</legend>
  34. <label for="year">年月日:</label>
  35. <input name="year" id="year" value="1990-06-05" autofocus />
  36. <button>提交</button>
  37. </fieldset>
  38. </form>
  39. <label>生肖名称:<?= $name ?></label>
  40. <label>生肖年份:<?= $years ?></label>
  41. <label>吉祥方位:<?= $fw ?></label>
  42. <label>吉忌颜色:<?= $sc ?></label>
  43. <label>吉凶数字:<?= $sz ?></label>
  44. <label>幸运花:<?= $xyh ?></label>
  45. <label>总体运势:<?= $ys ?></label>
  46. <label>事业:<?= $sy ?></label>
  47. <label>爱情:<?= $aq ?></label>
  48. <label>性格:<?= $xg ?></label>
  49. <label>优点:<?= $yd ?></label>
  50. <label>缺点:<?= $qd ?></label>
  51. </body>
  52. </html>

mvc框架实现

1.架构

  • M :MODEL, 使用第三方包composer require catfan/medoo实现
  • V :VIEW, 使用第三方包composer require league/plates实现
  • C :CONTROLLER :业务逻辑是写在控制器中

2. 流程

  • 创建自己的框架核心代码,MODEL, VIEW,分别继承第三方的包
  • 创建自己的应用, 按MVC架构模式,创建属于自己的models, views, controllers

3.mvc框架实现详细过程

  • 1.首先创建如下图目录,其中pulic为web访问目录,core为核心层目录,app为应用层目录

mvc框架

  • 2.配置composer.json为下载三方包做准备,配置代码如下
  1. "require":{
  2. "catfan/medoo":"^2.1.0",
  3. "league/plates":"^3.4.0"
  4. },
  • 3.在frame目录打开终端,执行composer install安装第三方包。如图所示

三方包

  • 4.安装完毕后多出vendor目录,再次对composer.json配置autoload项,以便加载所有类,composer.json,代码如下。
  1. {
  2. "require":{
  3. "catfan/medoo":"^2.1.0",
  4. "league/plates":"^3.4.0"
  5. },
  6. "autoload": {
  7. "psr-4":{
  8. "lib\\":"extend/lib",
  9. "app\\":"app",
  10. "core\\":"core"
  11. }
  12. }
  13. }
  • 5.在public/index.php加入代码require __DIR__ . '/../vendor/autoload.php';加载所有类。

  • 6.让核心层core/model.php,core/view.php分别继承三方包中的medoo类Engine类core/model.php代码如下

  1. <?php
  2. namespace core;
  3. use Medoo\Medoo;
  4. class Model extends Medoo
  5. {
  6. public function __construct()
  7. {
  8. //mysql连接参数
  9. $options = [
  10. 'type' => 'mysql',
  11. 'host' => 'localhost',
  12. 'database' => 'phpcn',
  13. 'username' => 'root',
  14. 'password' => '',
  15. 'charset' => 'utf8'
  16. ];
  17. parent::__construct($options);
  18. }
  19. }

core/view.php代码如下

  1. <?php
  2. namespace core;
  3. use League\Plates\Engine;
  4. class view extends Engine{
  5. public function __construct($path)
  6. {
  7. parent::__construct($path);
  8. }
  9. }

7.让应用层的app/model/catemodel.php 继承核心层的model,代码如下

  1. <?php
  2. namespace app\model;
  3. use core\Model;
  4. class catemodel extends model{
  5. public function __construct()
  6. {
  7. parent::__construct();
  8. }
  9. }

8.在应用层的app/view/cate/index.php加入渲染代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <link rel="stylesheet" href="static/css/style.css">
  8. <title>Document</title>
  9. </head>
  10. <body>
  11. <table>
  12. <caption>课程信息表</caption>
  13. <thead>
  14. <tr>
  15. <td>编号</td>
  16. <td>名称</td>
  17. <td>封面</td>
  18. <td>课程简介</td>
  19. <td>创建时间</td>
  20. <td>操作</td>
  21. </tr>
  22. </thead>
  23. <tbody>
  24. <?php foreach ($lists as $list) : ?>
  25. <tr>
  26. <td><?= $list['cou_id'] ?></td>
  27. <td><?= $list['title'] ?></td>
  28. <td><img style="width:100px" src=" <?= $list['pic'] ?>" alt="课程封面"></td>
  29. <td><?= $list['info'] ?></td>
  30. <td><?= date("Y-m-d H:m:s", $list['add_time']) ?></td>
  31. <td><button>删除</button><button>编辑</button></td>
  32. </tr>
  33. <?php endforeach; ?>
  34. </tbody>
  35. </table>
  36. <!-- 生成分页条 -->
  37. <p>
  38. <? for ($i = 1; $i <= $pages; $i++) : ?>
  39. <? $jump = sprintf('?page=%d', $i) ?>
  40. <? $active = ($i == $page) ? 'active' : '' ?>
  41. <a class="<?= $active ?>" href="<?= $jump ?>"><?= $i ?></a>
  42. <!-- 生成高亮分页条 -->
  43. <? endfor ?>
  44. </p>
  45. </body>
  46. </html>

9.在应用层的controller/cate.php加入逻辑代码controller/cate.php代码如下

  1. <?php
  2. namespace app\controller;
  3. class Cate{
  4. public $view;
  5. public $model;
  6. public function __construct($model,$view){
  7. $this->model=$model;
  8. $this->view=$view;
  9. }
  10. public function index($page = 1, $pageSize = 10)
  11. {
  12. $offset = ($page - 1) * $pageSize;
  13. $lists = $this->model->select('mj_course_lists', ['cou_id', 'title', 'pic', 'info', 'add_time'], ['LIMIT' => [$offset, $pageSize]]);
  14. // var_dump($lists);
  15. $total = $this->model->count('mj_course_lists');
  16. $pages = ceil($total / $pageSize);
  17. return $this->view->render('cate/index', ['lists' => $lists, 'pages' => $pages, 'page' => $page]);
  18. }
  19. }

至此一个mvc小框架已经完成。下面使用框架

3.使用mvc框架渲染页面

  • 思路为创建应用层的model对象 与核心层的view对象,注入到应用层的cate对象中,使用cate对象中的index方法对页面进行渲染,实例代码如下
  1. <?php
  2. require __DIR__ . '/../vendor/autoload.php';
  3. use core\Model;
  4. use core\View;
  5. use app\controller\Cate;
  6. use app\model\CateModel;
  7. //创建 应用层的mode
  8. $m = new CateModel;
  9. // 指定渲染文件路径
  10. $path = __DIR__ . '/../app/view';
  11. //创建 核心层的view对象
  12. $view = new View($path);
  13. // 创建应用层的cate对象
  14. $c = new Cate($m, $view);
  15. // 提取参数get 参数
  16. parse_str($_SERVER['QUERY_STRING'], $params);
  17. // 执行 cate对象中的index方法, 参数为 $params
  18. echo call_user_func_array([$c, 'index'], $params);
相关推荐
阅读 +