curl扩展与composer
作业标题:0824 curl扩展与composer
作业内容:1. 使用curl请求聚合支付的驾考宝典题库接口数据, 并渲染到页面上; 2. - composer 常用的指令有哪些? 3. mvc pathinfo 路由映射是怎么实现的?
- 使用curl请求聚合支付的驾考宝典题库接口数据, 并渲染到页面上;
<?php
//curl初始化 获取一个curl句柄,在后端发起网络请求
$ch=curl_init();
$url="http://v.juhe.cn/jztk/query?";
$key='acab39426b2c6f83c2782c795060bb4a';
$subject=1;
$model='c1';
$testType='rand';
$query=http_build_query(["key"=>$key, 'subject'=>$subject,
'model'=>$model,'testType'=>$testType]);
//echo $query;
curl_setopt($ch,CURLOPT_URL,$url.$query);
curl_setopt($ch,CURLOPT_HTTPGET,true);
// 启用时会将头文件的信息作为数据流输出。
curl_setopt($ch,CURLOPT_HEADER,false);
// true 将curl_exec()获取的信息以字符串返回,而不是直接输出。
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$apiData = curl_exec($ch);
// $apiData = json_decode($apiData,true);
// var_dump( $apiData);
// die;
//echo $apiData;
curl_close($ch);
?>
<!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>
<style>
table {
color: #555;
background-color: #efefef;
border-collapse: collapse;
width: 800px;
text-align: left;
margin: auto;
}
td {
border: 2px solid #FFF;
padding: 5px;
}
table caption {
font-size: 1.2rem;
margin-bottom: 15px;
}
table thead tr:first-of-type {
background-color: darkturquoise;
color: white;
}
</style>
<body>
<script>
const obj = <?=$apiData?>;
// 创建表格元素
const table = document.createElement('table');
console.log(table);
// 表头: 城市 + 标题, 如:合肥天气预报
table.createCaption().textContent ='';
// 创建表头,并尾部添加新行,将表头参数填入
const tr = table.createTHead().insertRow(-1);
tr.insertCell(0).innerText = '驾校答题';
// 遍历未来几天的天气对象数组
obj.result.forEach(item=>{
// 先生成一个新行,并插入到表尾
const row = table.insertRow(-1);
// 遍历每一天的天气对象数组,并填充到生成的单元格中
row.insertCell(0).innerHTML = item.id+"、"+item.question+"<br>"+"A:"+item.item1+"<br>"+
"B:"+item.item2+"<br>"+"C:"+item.item3+"<br>"+"D:"+item.item1+"<br>"+"正确答案:"+item.explains+
"<br>"+"<img src="+item.url+">";
// // row.insertCell(0).innerText = item.date;
// row.insertCell(1).innerText = item.temperature;
// row.insertCell(2).innerText = item.weather;
// row.insertCell(3).innerText = item.direct;
// 将生成的该行插入到表格元素中
table.appendChild(row);
});
// 最后将表格添加到页面中
document.body.appendChild(table);
</script>
</body>
</html>
- composer 常用的指令有哪些?
显示所有已经安装的包
composer show
移除指定的依赖包package_name
composer remove package_name
搜索包名为package_name的信息
composer search package_name
添加一个指定的包(不需要手动在 composer.json 里添加依赖信息)
composer 会先找到合适的版本,然后更新composer.json文件,在 require 那添加 package_name 包的相关信息,
再把相关的依赖下载下来进行安装,最后更新 composer.lock 文件并生成 php 的自动加载文件。
composer require package_name
更新所有依赖包
composer update
更新指定的包package_name
composer update package_name
更新指定的多个包package_name1、package_name2
composer update package_name1 package_name2
通过通配符匹配包更新
composer update vendor/* - mvc pathinfo 路由映射是怎么实现的?
<?php
//mvc这种架构模式 url地址都会映射到控制器下面的一个具体操作方法上
namespace mvc;
class User
{
function index($id,$name)
{
return "您好$name,你的id是$id";
}
function getName()
{
return '你好';
}
}
$pathinfo =array_values(array_filter(explode("/",$_SERVER['PATH_INFO']))) ;
// var_dump($pathinfo);
$controller = __NAMESPACE__.'\\'.array_shift($pathinfo);
// echo $controller;
$action = array_shift($pathinfo);
// echo $action;
// $params = ['id'=>1,'name'=>'peter'];
// 从url http://chloe.io/0824/api/index.php/user/index/id/1/name/peter 中提取参数
// var_dump($pathinfo);
for ($i=0; $i < count($pathinfo) ; $i+=2) {
if(isset($pathinfo[$i+1]) && !empty($pathinfo[$i+1]))
$params[$pathinfo[$i]] = $pathinfo[$i+1];
}
// var_dump($params);
echo call_user_func_array([(new $controller),$action],$params);