許久不寫代碼,發(fā)現(xiàn)很多基礎(chǔ)都已經(jīng)忘得差不多了,感覺復(fù)習(xí)一下。寫不出文檔,就先把技術(shù)給練一下吧。由于我沒有系統(tǒng)地學(xué)習(xí)過php,所以很多都是網(wǎng)上找的零碎的知識(shí),可能會(huì)有錯(cuò),還望指正!
-
fastadmin采用的是MVC模式,所以要寫控制器。而我沒有搞清楚路徑中的含義,導(dǎo)致報(bào)錯(cuò)。
http://192.168.1.175/HealthManager/public/index.php/mobile/test/test
因?yàn)槲业膌ocalhost定位在www文件夾,所以在登陸操作的時(shí)候會(huì)出現(xiàn)加載不出樣式的情況,根據(jù)控制臺(tái)network顯示,是因?yàn)榈刂氛也坏健?br> 而后面訪問控制器中的方法,則是因?yàn)槲覐?fù)制粘貼,忘記了該類的名字了,導(dǎo)致找不到控制器。
image.png -
如何從服務(wù)器端獲取數(shù)據(jù)并渲染?
一開始我在服務(wù)器端使用data)
的方法,但是app端接收到的數(shù)據(jù)卻是html而不是json。
后來我直接在服務(wù)器端返回json編碼后的數(shù)據(jù),再傳回app,然后在app端用for循環(huán)賦值。
雖然比以前麻煩一點(diǎn),但是還是可以實(shí)現(xiàn)的。問題是為何這里服務(wù)器沒有傳回json值?過去我用mui框架開發(fā)的時(shí)候是可以的。
image.png

- 遇到了數(shù)據(jù)中含有html標(biāo)簽,而渲染的時(shí)候被當(dāng)作字符串的問題。
解決方法:https://blog.csdn.net/gossiphhh/article/details/78316553
代碼:
<view class="title" v-html="item">
{{item}}
</view>
ps:
如果item里面沒有html標(biāo)簽,則無法解析,且也無法正常渲染,因?yàn)殇秩竟?jié)點(diǎn)里面必須是string或array
注意:
在和v-for使用時(shí),一定不要把v-html和v-for寫在一個(gè)view里面,否則會(huì)讓非html標(biāo)簽內(nèi)容無法顯示。應(yīng)該寫在有html標(biāo)簽的最小view里面。也就是不要影響別的view里的內(nèi)容。
<view class="selection-item row" v-for="(i,nindex) in item.selection" :key="nindex">
<view class="" v-html="i">//這樣寫才不會(huì)影響到input的正常顯示
{{i}}
</view>
<view class="" v-if="homePosts[index]['selection'][0]=='生日'">
<input type="text" value="" placeholder="input"/>
</view>
</view>
- php數(shù)組相關(guān)
1)建立一個(gè)數(shù)組:
$a=[];
$a=['name'=>'Homura','age'=>'500']
這種是有鍵名的定義方式,這個(gè)可以用于json格式的數(shù)組創(chuàng)建。
<?php
$array = array("foo", "bar", "hallo", "world");
var_dump($array);
?>
array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(5) "hallo"
[3]=>
string(5) "world"
}
這是一維數(shù)組的定義方式,無需鍵名
給數(shù)組添加一個(gè)元素,可以用
array_push(array_name,value)
or
array_name[]=value;
二維數(shù)組中某個(gè)元素的使用:
array_name[index]['key']
for example:
$waifu=[{'name'=>'Homura','age'=>'500'},
{'name'=>'Hikari','age'=>'501'}]
i want to get Homura
waifu[0]['name']=Homura
- 如果我數(shù)據(jù)庫(kù)中的一條數(shù)據(jù)漏掉了了,那么之后該怎么補(bǔ)上?
我想到的是在數(shù)據(jù)庫(kù)中把要插入的位置后面的數(shù)據(jù)的id都先+1,然后空出這個(gè)位置,進(jìn)行update操作。但是這樣一來不就需要直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作了嗎。那么后臺(tái)管理的好處不久體現(xiàn)不出來了嗎?這是否意味著我應(yīng)該增加一個(gè)在某一行后插入的功能呢?就像網(wǎng)頁版的數(shù)據(jù)庫(kù)管理工具一樣 - var/let
區(qū)別暫時(shí)不討論,只說一下注意點(diǎn)。
這兩個(gè)應(yīng)該都是定義變量。我試圖用變量來替代麻煩的數(shù)組元素定位。
let isActive=that.homePosts[index]['isActive']
結(jié)果我在后面修改數(shù)組元素的時(shí)候直接用變量名來代替了
isActive=!isActive
我以為這樣子數(shù)組元素也會(huì)改變,但是實(shí)際上它們的地址是不同的。所以要簡(jiǎn)化也只能這么書寫:
that.homePosts[index]['isActive']=!isActive
-
git使用問題記錄
終于到git了,這個(gè)工具必須要學(xué)會(huì)使用??!
1) 在本地初始化一個(gè)repository
在需要建立git倉(cāng)庫(kù)的文件夾右鍵點(diǎn)擊gui bash here,進(jìn)入git 命令行
image.png
我一直都犯了錯(cuò)。我總是喜歡在一個(gè)項(xiàng)目的外部進(jìn)行初始化,為的是想add的時(shí)候直接寫項(xiàng)目名稱更加方便。但是實(shí)際上這樣子做會(huì)把別的項(xiàng)目也給上傳到遠(yuǎn)程庫(kù)。實(shí)際上,一個(gè)項(xiàng)目就應(yīng)該是單獨(dú)的一個(gè)git庫(kù)。而添加多個(gè)修改的文件,只需要用git add -A .指令就可以了。唉。
2)初始化一個(gè)Git倉(cāng)庫(kù),使用git init命令。

3)添加文件到Git倉(cāng)庫(kù),分兩步:
使用命令git add <file>,注意,可反復(fù)多次使用,添加多個(gè)文件;

我直接把外部整個(gè)文件夾都add入庫(kù)了
使用命令git commit -m <message>,完成。

4)在碼云上創(chuàng)建一個(gè)repository,勾選建立readme文檔(這是一個(gè)坑)

5)關(guān)聯(lián)本地和遠(yuǎn)程的repository
$git remote add origin git@gitee.com:uesugieriislf/HealthManager.git
這里的origin是遠(yuǎn)程庫(kù)的別名,可以自己取一個(gè),默認(rèn)為origin

-
可以用git remote -v來查看遠(yuǎn)程庫(kù)情況
image.png
7)這里是一個(gè)錯(cuò)誤記錄

我想把本地庫(kù)push到遠(yuǎn)程庫(kù),但是報(bào)錯(cuò)了,提示遠(yuǎn)程庫(kù)和本地庫(kù)內(nèi)容不一致,要我先從遠(yuǎn)程庫(kù)pull后再push
于是我使用pull

于是再修改

終于到了關(guān)鍵處了,
提示無法合并不相關(guān)的歷史
于是百度
解決Git無法合并不相關(guān)的歷史
解決方法:
git pull origin master --allow-unrelated-histories

允許合并,這時(shí)git轉(zhuǎn)入insert模式,要我寫明合并理由。由于本人沒有系統(tǒng)學(xué)過linux,因此不太了解如何退出編輯模式,故繼續(xù)百度
git 如何退出編輯模式
按esc,再輸入;wq,即可保存退出
于是我們pull成功了,就可以push了

8)分支管理和多人協(xié)作
合并分支:git merge <分支名>
默認(rèn)采用fast forward 模式
如果想看歷史記錄,最好禁用,則加上參數(shù):--no-ff
git merge dev --no-ff
git stash在切換分支時(shí)可能會(huì)經(jīng)常用到
9)git add 多個(gè)文件
git add 所有文件
git add -A=git add all file
git add -A .=git add all file edited
git add xx命令可以將xx文件添加到暫存區(qū),如果有很多改動(dòng)可以通過 git add -A .來一次添加所有改變的文件。
注意 -A 選項(xiàng)后面還有一個(gè)句點(diǎn)。 git add -A表示添加所有內(nèi)容, git add . 表示添加新文件和編輯過的文件不包括刪除的文件; git add -u 表示添加編輯或者刪除的文件,不包括新添加的文件
10)忽略一些文件
http://www.itdecent.cn/p/74bd0ceb6182
在git提交時(shí),總有一些臨時(shí)文件等是我們不想提交的,這時(shí)就可以定義gitignore規(guī)則來忽略它們
https://www.liaoxuefeng.com/wiki/896043488029600/900004590234208
事實(shí)上,最新的win10已經(jīng)可以直接新建一個(gè).gitignore就行了,不用再另存為了
11)如果現(xiàn)在的代碼出了問題,想清空遠(yuǎn)程庫(kù)和本地庫(kù),該如何操作?
本地:刪除.git文件
遠(yuǎn)程:在碼云中的倉(cāng)庫(kù)管理里面清空倉(cāng)庫(kù)
然后重新建庫(kù)上傳。記得要寫忽略規(guī)則
12) 如何用github和別人進(jìn)行協(xié)同開發(fā)?
如何用github和別人進(jìn)行協(xié)同開發(fā)?
8.uni-app引入icon font圖標(biāo)
1)在iconfont網(wǎng)站下好文件,然后解壓到想要放的文件夾中(比如static/css)
也可以不做什么修改,頂多刪去了一些不用的文件,保留了所有字體文件,然后一起放在文件夾里,當(dāng)然這種寫法顯然不太好。占空間不說,每次更新都要下載一遍,不方便。所以還是推薦使用網(wǎng)絡(luò)引用方式。具體看鏈接
2)注意,在main.js 中寫:
import "./static/css/iconfont.css",否則無法生效
9.uni-app圖片
1)圖片名字不能有中文,也不能有空格
2)背景圖片有限制,不能超過40KB,超過就要用服務(wù)器地址或者base64
https://ask.dcloud.net.cn/question/61878
10.css畫三角形
11.多級(jí)返回
onUnload() {
uni.navigateBack({
delta: 2//1是返回,2是返回兩層,以此類推
});
}
- ThinkPHP5引用百度AI菜品識(shí)別
之前看官方文檔卡了好久,結(jié)果問朋友才發(fā)現(xiàn)其實(shí)可以很簡(jiǎn)單,我還不敢相信。說起來,我到現(xiàn)在也不知道為何不用獲取TOKEN,明明網(wǎng)上找的例子都寫了呀
1.)在百度AI網(wǎng)頁下載好PHP的SDK
https://ai.baidu.com/sdk#vis
2)解壓,重命名,放入extend路徑
image.png
3)在需要用的php文件里添加namespace和use,否則無法引入class文件
注意,只需要添加命名空間和use,千萬不要?jiǎng)h除原有的代碼,否則會(huì)造成依賴關(guān)系出錯(cuò)



4)參考文檔(https://ai.baidu.com/docs#/ImageClassify-PHP-SDK/top)
在自己的控制器中寫代碼
<?php
namespace app\mobile\controller;
use AI\AipImageClassify;
use think\console\command\Lists;
use think\Controller;
use think\Db;
use think\Loader;
use app\mobile\model\Item as ItemModel;
const APP_ID = '你的APP_ID';
const API_KEY = '你的API_KEY';
const SECRET_KEY = '你的SECRET_KEY';
class Pic extends Controller
{
public function index()
{//判斷是否是post請(qǐng)求
if (request()->isPost()){
$imagePath=input('imagePath');
//接受請(qǐng)求參數(shù)
$client = new AipImageClassify(APP_ID, API_KEY, SECRET_KEY);
$image = file_get_contents($imagePath);
// 調(diào)用菜品識(shí)別
$client->dishDetect($image);
// 如果有可選參數(shù)
$options = array();
$options["top_num"] = 3;
$options["filter_threshold"] = "0.7";
$options["baike_num"] = 5;
// 帶參數(shù)調(diào)用菜品識(shí)別
$data=$client->dishDetect($image, $options);
dump($data['result'][0]);
}
}
}
13.uni-app中請(qǐng)求API的注意事項(xiàng)
uni.request({
url: _self.apiServer+'pic/index',
method: 'POST',
data: {
imagePath:_self.staticServer+JSON.parse(uploadFileRes)
},
success: res => {
console.log(res.data);
},
fail: () => {},
complete: () => {}
});
1)url必須是字符串,這里定義的_self.apiServer是在main.js里面定義好的全局使用的服務(wù)器地址

2)這里的uploadFileRes = uploadFileRes.data;
是從服務(wù)器端接收到的數(shù)據(jù),再次上傳給服務(wù)器需要經(jīng)過json.parse轉(zhuǎn)換為JavaScript對(duì)象后才可以使用。因?yàn)橐哑唇映鲆粋€(gè)圖片的網(wǎng)絡(luò)地址,所以用到了字符串的拼接。如果不把json數(shù)據(jù)解析成出來,就無法拼接
安裝fastadmin
在開發(fā)過程中遇到了無法修復(fù)的bug,只好重新安裝過。于是記錄下安裝過程,方便以后參考
1)安裝文檔https://doc.fastadmin.net/docs/install.html
輸入網(wǎng)址
http://www.yoursite.com/install.php

填寫對(duì)應(yīng)的數(shù)據(jù)庫(kù)名稱,這里最關(guān)鍵了,因?yàn)槲沂侵匦掳惭b,所以之前的代碼還是可以復(fù)用的。
2)對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改后一定要重新生成CRUD才生效,并且要采用強(qiáng)制覆蓋模式
3)在application的config.php里面找到'login_captcha'即可設(shè)置登陸驗(yàn)證碼的開關(guān)
4)新安裝好后記得要打開調(diào)試,這個(gè)只在開發(fā)階段打開,部署時(shí)要關(guān)掉,以免影響性能。開發(fā)時(shí)不打開往往就會(huì)看到一個(gè)“你無法訪問當(dāng)前頁面”的網(wǎng)頁,沒有幫助,還會(huì)讓人迷惑。所以必須記得
5)數(shù)據(jù)庫(kù)里面在設(shè)計(jì)的時(shí)候最好都默認(rèn)為空,否則很容易報(bào)錯(cuò)。
6)插入的時(shí)候可以采用兩種方式,一種是直接用Db的insert()方法,還有一種是調(diào)用model,用save()。
7)在服務(wù)器端寫dump()或者echo,就相當(dāng)于return了
登陸功能的實(shí)現(xiàn)
這是一個(gè)坑,一時(shí)半會(huì)兒可能不會(huì)填
我突然意識(shí)到,合作難得不是使用git這樣的工具,而是兩個(gè)人的思路不一樣。我們的代碼幾乎是不同風(fēng)格的,最好就不要一起做一個(gè)模塊,否則就要改。而且,我們沒有對(duì)數(shù)據(jù)庫(kù)有一致的認(rèn)識(shí),導(dǎo)致前端界面與數(shù)據(jù)庫(kù)不匹配,這下又得改了。不難,但是很煩!我們的交流也太少了。嗯,內(nèi)心十分煩躁。
我覺得數(shù)據(jù)庫(kù)的地位相當(dāng)重要。首先應(yīng)該確認(rèn)數(shù)據(jù)庫(kù)的設(shè)計(jì),然后再與前端頁面對(duì)應(yīng)起來。我們的設(shè)計(jì)圖上應(yīng)該標(biāo)清楚其與數(shù)據(jù)庫(kù)字段的對(duì)應(yīng)關(guān)系的?,F(xiàn)在他應(yīng)該已經(jīng)發(fā)現(xiàn)問題所在了。肯定要修改頁面了。按他這樣的寫法,那不是要干很多的重復(fù)勞動(dòng)了。
還有,英文水平還是要有的,否則我都要看不懂命名了。漢語拼音真的太讓人不明所以了。就和片假名一樣了。
但是我不確定的是,應(yīng)該用手繪圖紙還是用計(jì)算機(jī)繪制。前者覺得太落后,后者又缺乏工具。
突然發(fā)覺,兩個(gè)人合作的時(shí)候應(yīng)該要把數(shù)據(jù)庫(kù)放在云服務(wù)器上,這樣兩個(gè)人的數(shù)據(jù)就可以共享了。而數(shù)據(jù)庫(kù)對(duì)帶寬的要求也不高。而開發(fā)則是繼續(xù)用git
popup組件使用tip
不要在組件標(biāo)簽處寫class,這樣會(huì)導(dǎo)致組件出問題。
要寫樣式,就在內(nèi)部寫。
<uni-popup ref="popup" type="bottom">
<view class="Popup-header row jc-between padding-sm" >
<view class="" @click="cancel">
取消
</view>
<!-- 此處應(yīng)為下拉框 -->
<view class="">
早餐
</view>
<view class="" @click="confirm">
確認(rèn)
</view>
</view>
</uni-popup>
progress組件使用tip
一定要有一個(gè)有寬高的外置view,否則無法顯示
<view class="progress-box">
<progress percent="80" activeColor="red" active stroke-width="8" />
</view>
progress的動(dòng)畫完成事件只有微信支持……那我為何還要用這個(gè)組件呢?直接用動(dòng)畫寫不好嗎?說好的跨平臺(tái)呢?
uniapp頁面?zhèn)鲄?/h2>
https://blog.csdn.net/wwf1225/article/details/90476503
注意:傳數(shù)組前要JSON.stringfy
接受頁面要JSON.parse才可以使用
后續(xù)問題
沒想到,在許久不碰前端代碼后,今天我還得來記錄一些筆記。但其實(shí),這些都是我以前開發(fā)時(shí)記錄過的。只是那時(shí)沒有一個(gè)統(tǒng)一的筆記本,都是在工程文件里隨手建一個(gè)md文檔記錄。開發(fā)的時(shí)候的確還挺方便的,可是一旦開始新項(xiàng)目,就會(huì)遇到找不到筆記的問題。
現(xiàn)在的我,就是腦子里有一個(gè)印象,可是并不準(zhǔn)確,想找當(dāng)初的筆記,卻發(fā)現(xiàn)又找不著了,或者是太懶了。
所以,一個(gè)記錄筆記的網(wǎng)站不可缺。以前是簡(jiǎn)書,現(xiàn)在是語雀。我覺得,這應(yīng)該是自己未來該有的狀態(tài)。所有的經(jīng)驗(yàn),都值得被記錄。
這次要記錄的是局域網(wǎng)中不同設(shè)備之間如何訪問。這個(gè)以前上網(wǎng)絡(luò)課程的時(shí)候還只是一道計(jì)算題,算各種子網(wǎng)地址,然而到現(xiàn)實(shí)中使用時(shí)才知道問題不是怎么計(jì)算地址,而是怎么利用地址。
最初用瀏覽器訪問后臺(tái),都是用localhost或者h(yuǎn)ttp://127.0.0.1,因?yàn)檫@是默認(rèn)的這臺(tái)主機(jī)的意思。而別的設(shè)備要訪問這臺(tái)主機(jī),那就要知道這臺(tái)主機(jī)在局域網(wǎng)(公網(wǎng))中的地址。所以應(yīng)該先查出自己電腦的子網(wǎng)地址,然而在別的設(shè)備中使用這個(gè)地址來指代這臺(tái)設(shè)備。
![YC_IKIH3U)9G2T_ZPWG]UBK.jpg](https://upload-images.jianshu.io/upload_images/2233068-c296aa6ca91d6af7.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
當(dāng)然,這個(gè)認(rèn)識(shí)依舊很粗淺,只是能解決問題,而不能解釋原因。




