虛擬機部分
homestead配置訪問名稱
[windows]
下首先修改C:\Windows\System32\drivers\etc\host
,將虛擬機IP
與指定的名稱綁定。
192.168.10.10 news.test
然後修改homestead.yaml
(在安裝文件夾下),綁定域名到特定項目的public
文件夾。
sites:
- map: news.test
to: /home/vagrant/Code/20190108bg-laravel/public
Laravel
框架部分
遷移數據庫和測試數據生成
遷移數據庫
php artisan make:migration xxx //用Blueprint實現字段定義,要注意區分新建和修改,其它參看文檔
測試數據生成
首先定義數據庫模型(model
),即需要填充操作的數據庫
php artisan make:model xxx // 注意此處定義的名字的複數形式會被作爲表名,可以在模型內更改
構造生產函數
php artisan make:factory xxx //生產函數內部使用Faker實現字段填充
將生產函數添加到默認seed
:DatabaseSeeder
public function run() {
factory(\App\Article::class, 500)->create(); //500爲生成數量
}
或是新建一個seed
php artisan make:seed xxx
public function run() {
$this->call(UsersTableSeeder::class); // 詳情文檔
}
啓動seed
php artisan db:seed
模型內部常用的定義
在模型內部的定義會影響到後續使用該模型操作的數據庫結果,定義在模型類當中。
使用軟刪除,啓用後會創建默認字段deleted_at
,當模型類對數據調用delete
刪除時,自動創建當前時間,否則該字段爲null
,此外開啓該字段以後框架會在所有使用該模型類的sql
操作末尾加上條件where
deleted_atis null
:
use SoftDeletes
protected $dates = ['deleted_at'];
修改軟刪除的字段名方式,此處注意遷移數據庫需與此處一致,如果更改後上述第二條定義也需要一致。
const DELETED_AT = 'isDelete';
棄用自動創建created_at
和updated_at
字段(默認開啓)
public $timestamps = false;
所使用的路由定義方法總結
Laravel
框架的路由定義位置在/routes/web.php
中,用到的方式如下:
閉包方式:
Route::get('/', function () {
return redirect('/news');
});
控制器方式:
Route::get('/news', 'NewsController@index')->name('news.home'); //name爲別名,後續可以使用框架提供的route()方法訪問
路由分組:
Route::name('form.')->prefix('form')->group(function () {
Route::post('add', 'RequestController@add')->name('add'); //統一處理前綴爲/form的路由,此處的name會自動和分組name合併
Route::post('modify', 'RequestController@modify')->name('modify');
}
三種常用的操作數據庫的方式
原生語句:
use Illuminate\Support\Facades\DB;
DB::statement('sql'); // 原生操作方式不會使用模型類中的定義
查詢構建器方式:
use Illuminate\Support\Facades\DB;
DB::table('table_name')->xxx(); // xxx爲方法名,具體參考文檔,此處不會調用模型類中的定義
Eloquent
方式:
use \App\User; //定義的模型類
DB::all()->xxx(); //使用eloquent都會調用模型類中的設定,除了不用手動指定表外可以直接使用查詢控制器的方法。
Laravel
及blade
中提供訪問特定變量的方法
訪問config
中配置的變量:
config(xxx.val_name); // xxx爲文件名,後者爲變量名
訪問url
:
url("path") // path可以是路由中定義的相對路徑,會自動解析爲絕對路徑
asset("path") // 常用來引用靜態文件,位置固定
route("name") // name爲路由中定義的別名,會自動解析
軟刪除的使用方法
軟刪除首先在模型類中棄用,並在遷移文件中配置相應的刪除字段,最後調用時用模型類的刪除即可。
$flag = $article->delete(); // 此處一定是通過模型類調用
怎麼設置時區
時區的設定位置在config/app.php
'timezone' => 'Asia/Shanghai', // 默認UTC
利用post
方法提交返回419
錯誤
Laravel
框架中處於安全會處理跨站攻擊,需要在表單中添加語句
<form>
<!--...-->
<input type="hidden" name="_token" value="{{ csrf_token() }}"/>
</form>
PHP
部分
給數組添加一個值
直接賦值:
arr_name['xxx'] = value;
利用foreach
給數組循環賦值
循環賦值時注意不能對as
後的值進行修改,這樣最後不會被保存,一定要把修改保存到傳入的變量中
foreach ($res as $key=>$val) {
$res[$key]["xxx"] = $your_value // 賦值給原$res
}
如何判斷_GET
或其它數組是否存在及其中某個元素是否存在
if (is_array($_GET) && count($_GET)>0) { // 藉助is_array count檢查數組情況
if (isset($_GET['c_sort'])) { // 用isset判斷變量是否存在
//
}
}
Mysql
部分
怎麼更新作爲查詢條件的字段
藉助臨時表完成:
DB::statement('CREATE TABLE `temp` AS (SELECT * FROM `articles` WHERE `category_id`= ?)', [$cid]);
DB::statement('UPDATE `articles` SET `category_id`=1 WHERE `id` IN (SELECT `id` FROM `temp`)');
DB::statement('DROP TABLE `temp`');
前端html
css
js
部分
點擊一個按鈕觸發另一個按鈕或者文本框的方法
php
用echo
打印alert
後再跳轉到頁面出現字體變大,css
失效問題
此處的問題是alert
彈出後打斷了單線程的js和css加載,導致後面出現問題。如果只是想跳回之前的老頁面,可是使用history.back()
echo "<script>alert('分類 ' + $name + ' 已存在!');history.back();</script>";
防止回車鍵提交表單
在表單中加入以下js
代碼:
<form method="post" onkeydown="if(event.keyCode==13)return false;" action="" id="listform">
對同一個表單不同的提交按鈕執行不同的動作
在按鈕對應的js
代碼中替換原來的action
動作:
document.getElementById("listform").action = "{{ route('form.delete') }}"
document.getElementById("listform").method = "post";
$("#listform").submit();
通過回車鍵提交表單內的一個特定的input
未實現
其它
grep
精確匹配的用法
du -h | grep -nw 'log' // n顯示行數,w實現精確匹配
總結
第一次用PHP
搭建後臺,之前僅僅是把Laravel
教程得代碼複製粘貼,雖然能跑,什麼都不懂。這次借用前端模板,先是用純PHP
實現了一遍,然後用Laravel
實現了一遍,感觸還是挺多。分別講述體會總結如下:
純PHP
實現:
現階段的體會就是雖然實現了,面向對象的思想完全沒有啊,基本都是走一步是一步。但就像之前說的一樣,如果過程都不熟悉,哪裏談得上對象。而且目前都沒有複雜的邏輯,整體的一個交互構造就是:前端->後臺->數據庫。
利用Laravel
框架的實現:
框架的使用總結如下,主要有以下幾個部分:
artisan
常用命令使用config
的配置和使用- 路由-控制器(
web
-controller
) - 數據庫模型
model
- 數據庫遷移(
migration
) - 隨機數據生成(
seed
factory
) blade
模板的基本使用
總體來說其實萬變不離其宗,核心還是有***前端->後臺->數據庫***三部曲,這裏還外加一個***路由***,不過之前這三部曲都是自己來寫,現在都變成了對框架的調用。前端使用了blade
模板,resources
和public
文件夾。數據庫可以選擇原生DB
操作,查詢構造器操作,Eloquent
三種方式來操作,至於後臺邏輯通常和路由結合在一起編寫,目前我的邏輯都寫在了控制器裏面,對於後期應該還要引入一個服務的概念。
此外還有一些通用的新的,比如說對PHP
語法的熟悉以及前端三件套的代碼能基本讀懂,能更具自己的需求做一個簡單的定製等等。
當然最重要的一點是越發感覺到了,單純意義上的編碼真的算不得是一個技術活。有時候知道解決思路和最優解決方法更多基於經驗和理論功底,往往實際上手發現某個方法不會那都是可以百度!谷歌!的呀!!!所以在一定程度上,思想和理論深度佔據指導地位啊!至於語言,寫着寫着,你閉着眼睛都會了,就和用筷子碗吃飯一個意義,但是前提是一定要用,看是看不出花來的,哪怕有時候看出花兒了,一上手丫的全是刺兒。