1、laravel的安裝php
一、composermysql
做用:主要管理php中的依賴關係(相似於yum源)laravel
能夠安裝的軟件:web
curl //主要用到微信開發中sql
upload //文本操做數據庫
excel //表格apache
mail //郵件json
log //日誌api
laravel //框架跨域
安裝:
下載地址:https://getcomposer.org/
沒有php解釋器,沒法運行php命令
yum install php-cli
執行下載命令
解壓後爲composer.phar,
到該目錄下運行命令將composer.phar重命名到/usr/local/bin/下
mv composer.phar /usr/local/bin/ composer並檢查是否重命名成功
切換到composer的中國鏡像:
composer config -g repo.packagist composer https:
//packagist
.phpcomposer.com
二、安裝laravel
一、進入項目目錄
cd /usr/local/apache2.4/htdocs/
composer create-project --prefer-dist laravel
/laravel
blog
或者安裝本身想要的版本
composer create-project --prefer-dist laravel
/laravel
blog 5.4.*
二、配置Apache:
進入到laracel根目錄
cd blog/
chmod 777 -R storage/
打開瀏覽器輸入地址:localhost/blog/public/ 顯示Larave歡迎潔面,安裝成功!!
2、laravel配置文件
一、環境配置(.env文件)
APP_KEY:環境變量解析(網站的密匙,保證網站的安全)
生成密匙:php artisan key:generate
APP_DEBUG:開發模式(默認爲ture,上線需設置爲false)
獲取配置信息:env('')方法,設置環境配置中未設置的變量env('','')
二、系統配置(config目錄下)
讀取配置:config('文件名.配置名'),如:config('app.timezone')
修改配置(臨時性的,不修改配置文件):config(['文件名.配置名'=>'值']);如:config(['app.timezone'=>'UTC']);
3、php artisan(php的工具匠):在項目根目錄下才能執行
本生就是一些php文件,能夠在命令行模式下執行這些文件,能夠完成建立控制器、建立中間件、生成密匙等。
一、php artisan down:網站下線(頁面爲views/503.blade.php)
二、php artisan up:網站上線
三、php artisan route:list:查看路由列表
四、php artisan make:controller 控制器名:新建控制器
4、路由
一、路由類型
Route::get($rul,$callback);
Route::post($rul,$callback);
Route::put($rul,$callback);
Route::patch($rul,$callback);
Route::delete($rul,$callback);
Route::options($rul,$callback);
二、get();
Route::get('login','LoginController@index');
三、post();
Route::post('check','LoginController@check');
受CSRF保護(保護網站不受跨站請求僞造(CSRF)攻擊。保護表單安全。)
需在表單內添加{{csrf_field()}}
四、put();
路由中書寫:
Route::put('putWeb','LoginController@putweb'); //請求
Route::put('put','LoginController@put'); //處理
控制器書寫:
public function putWeb(){
return view('putweb');
} //請求
public function put(Request $request){
dd($request->input());
} //處理
五、路由的三種常見形式:
HTTP請求路由:
Route::get('url信息','處理的邏輯地址或功能代碼');
Route::put('url信息','處理的邏輯地址或功能代碼');
Route::post('url信息','處理的邏輯地址或功能代碼');
Route::delete('url信息','處理的邏輯地址或功能代碼');
Resource路由:url和控制器中的7個標準RESTful動做相綁定
Route::resource('url相關信息','控制器名稱');
控制器路由:url和控制器中的全部動做(只須要按照指定的規範來編寫動做便可)
Route::controller('url相關信息','控制器名稱');
六、路由的處理:
(1)把路由的處理交給控制器中的某個動做處理
Route::get('/','IndexController@index')
(2)直接處理路由(使用閉包函數形式處理)
Route::get('/',function(){
});
(3)路由參數:
Route::get('view/{id}',function($id){
}); //參數必傳
Route::get('view/{id?}',function($id=1){
}); //可選參數
七、控制器和路由
(1)爲控制器綁定路由時,能夠直接使用HTTP請求形式的路由
須要每個URL綁定到控制器中的某一個動做上
Route::get('/','IndexController@index');
(2)RESTful形式的資源控制器路由(只支持7種路由)
Route::resource('url相關信息','控制器名稱');
(3)隱式控制器路由
Route::controller('url相關信息','控制器名稱');
訪問index,方法名應爲getIndex
訪問getViewMsg方法,地址爲msg/view-msg
八、路由組(之後臺管理模塊爲例)
Route::group(['namespace'=>'Admin','prefix'=>'admin','middleware'=>'adminLogin'],function(){
Route::get('/','IndexController@index');//後臺首頁
Route::resource('user','UserController');//後臺用戶管理模塊
Route::resource('goods','GoodsController');//後臺商品管理模塊
});
(注:namespace爲命名空間,prefix爲路由前綴,middleware爲中間件)
九、中間件
簡介:中間件爲過濾進入應用的 HTTP 請求提供了一套便利的機制。例如,Laravel 內置了一箇中間件來驗證用戶是否通過認證(如登陸),若是用戶沒有通過認證,中間件會將用戶重定向到登陸頁面,而若是用戶已經通過認證,中間件就會容許請求繼續往前進入下一步操做。
固然,除了認證以外,中間件還能夠被用來處理不少其它任務。好比:CORS 中間件能夠用於爲離開站點的響應添加合適的頭(跨域);日誌中間件能夠記錄全部進入站點的請求,從而方便咱們構建系統日誌系統。
Laravel 框架自帶了一些中間件,包括認證、CSRF 保護中間件等等。全部的中間件都位於 app/Http/Middleware
目錄下。
建立中間件:php artisan make:middleware CheckToken
在app/Http/MiddLeware目錄下新建一箇中間件類CheckToken
註冊中間件:中間件分三類,分別是全局中間件、中間件組和指定路由中間件;
a、全局中間件:在app/Http/Kernel.php的數組屬性$middleware中添加便可。
b、分配中間件到指定路由:首先在app/Http/Kernel.php中添加本身的中間件key,定義後可使用middleware方法將其分配到路由:
Route::get('/',function(){
//
})->middleware('key');或路由組參數方式。
c、中間件組:經過使用HTTP Kernel提供的$middlewareGroups屬性實現。
Route::get('/', function () {
//
})->middleware('web');
Route::group(['middleware' => ['web']], function () {
//
});
默認狀況下,RouteServiceProvider
自動將中間件組web
應用到routes/web.php
文件,將中間件組api
應用到routes/api.php
d、中間件參數:中間件能夠接收額外的參數。例如:中間件文件中
RouteServiceProviderwebroutes/web.phpapiroutes/api.phppublic function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) { // Redirect... } return $next($request); }
路由中書寫:
中間件參數能夠在定義路由時經過:
分隔中間件名和參數名來指定,多箇中間件參數能夠經過逗號分隔
:Route::put('post/{id}', function ($id) {
//
})->middleware('role:editor');
終端中間件,能夠理解爲一個善後的後臺處理中間件。有時候中間件可能須要在 HTTP 響應發送到瀏覽器以後作一些工做,好比,Laravel 內置的 中間件會在響應發送到瀏覽器以後將 Session 數據寫到存儲器中,爲了實現這個功能,須要定義一個終止中間件並添加 方法到這個中間件: e、終端中間件:sessionterminate
<?php namespace Illuminate\Session\Middleware; use Closure; class StartSession { public function handle($request, Closure $next) { return $next($request); } public function terminate($request, $response) { // 存儲session數據... } }
terminate
方法將會接收請求和響應做爲參數。定義了一個終端中間件以後,還須要將其加入到 app/Http/Kernel.php
文件的全局中間件列表中。
當調用中間件上的 terminate
方法時,Laravel 將會從服務容器中取出一個該中間件的新實例,若是你想要在調用 handle
和 terminate
方法時使用同一個中間件實例,則須要使用容器提供的 singleton
方法以單例的方式將該中間件註冊到容器中。關於服務容器咱們就會在後面講到,暫時不深刻展開了。
十、請求:
(1)獲取地址:
$request->fullUrl();//輸出當前url地址
$request->path();//獲取URL路由
$request->url();//獲取URL地址初參數
$request->is('request');//判斷路由是否爲request,返回true或falst
(2)獲取請求類型:
$request->method();//返回請求類型
$request->isMethod('請求類型');//判斷請求是否爲特定請求
十一、閃存:閃存數據即 Flash Data,它的有效期是到下一個請求爲止,主要用在短生命週期的變量傳遞
(1)控制器方法中寫入緩存:
$request->flash();//所有寫入閃存
$request->flashOnly();//把誰寫入到閃存
$request->flaushExcept();//除了誰寫入閃存
或者在返回錯誤提示的時候存入緩存;
return back()->with('errors','用戶名長度有誤')->withInput();//所有存入閃存
(2)頁面input中添加value="{{old('input的name')}}"
詳細:http://www.imooc.com/article/17873?block_id=tuijian_wz
十二、文件上傳:
(1)獲取上傳文件信息:
$img=$request->file('input的name');或者
$img=$request->input的name
(2)判斷文件是否上傳
$request->hasFile('input的name');
(3)把文件移動到指定目錄
$ext=$request->file('img')->getClientOriginalExtension();//獲取後綴名
$newFile=time().rand().".".$ext//新文件名
$request->file('img')->move('目的地址',$newFile);//移動到指定目錄
(4)
(5)
1三、cookie
查看:$requset->cookie();//查看全部的cookie
或者\Cookie::get();
設置:\Cookie::queue('key','value',生存時間);
或者
$cookie=cookie('key','value',生存時間);
response('重定向')->cookie($cookie);
(注:laravel框架把全部的cookie進行加密,因此$_COOKIE['name'] != $request->cookie())
1四、響應:全部的路由及控制器必須返回某個類型的響應,併發送回用戶的瀏覽器,若是響應數組的話,直接轉換成json。
(1)響應字符串
(2)響應數組:轉換成json
(3)響應頁面:return view('頁面')->with(‘傳遞值’);
(4)文件下載:
return response()->download('文件所在路徑');
會報錯,沒有擴展
xampp:在/opt/lampp/etc/php.ini,找到php_fileinfo.dll並開啓
重啓apache
(5)文件查看:return response()->file('文件所在路徑');
5、數據庫遷移(migrate)
一、數據庫遷移簡介
(1)migrate簡介:
方便團隊開發,一次更改,團隊成員都會影響到
直接使用php代碼,而不是使用sql語句來操做數據庫
(2)配置數據庫帳號信息:.env配置文件
(3)數據庫遷移命令:php astisan migrate
命令行工具:sublime插件,terminal
(4)刪除自帶的用戶認證模塊:php astisan fresh
二、建立數據表
(1)建立數據庫文件
文件所在目錄:databases/migrations/數據庫遷移文件
文件名:年_月_日_時分秒_create_tableName_table.php
建立命令:php artisan make:migration create_name_table
(2)
在up方法中(新增數據表):
Schema::create('數據庫名',function(Blueprint $table){
$table->字段類型('字段名字');
如:$table->increments('id');
})
執行數據庫遷移命令:php artisan migrate
三、數據庫填充
(1)建立模型類
a、一個數據庫模型類對應一個數據表
b、目錄:app/目錄下直接建立
文件名:表名.php(首字母大寫)
c、模型類結構:類名 extends Model
(2)數據填充
a、數據填充文件
位置:databases/seeds/
文件名:表名TableSeeder.php
數據填充文件基本結構:類名 extends Seeder
填充文件方法:
public function run(){
DB::table('表名')->delete();//清空原始數據
表名::create([
'字段名'=>'值'
]);
}
b、執行數據填充命令
在databases/seeds/DatabaseSeeder.php文件中調用數據填充命令
在run方法中:$this->call('數據庫填充文件類名');
php artisan db:seed
可能會癡線一些問題,會提示一些類不能用
a、引入類的徹底命名空間
b、可使用composer命令:composer dump-autoload
6、數據庫操做
一、鏈接數據庫(.env文件):
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
二、執行原聲的sql語句
查詢:\DB::select('select * from tableName'); // \爲使用根命名空間
刪除:\DB::delete('delete from tableName where id=XX');
新增:\DB::insert('insert into tableName value()');
修改:\DB::update('update tableName set 字段="值"');
執行一段命令:\DB::statement('create database databaseName');
三、事物機制:(判斷執行的sql語句知否執行成功。)
開啓事物:\DB::beginTransaction();
事物回滾:\DB::rollback();
食物提交:\DB::commit();
四、連貫操做;
查詢:
\DB::table('tableName')->get();//查詢全部數據
\DB::table('tableName')->find();//查詢一條數據
\DB::table('tableName')->where(''id,'=',3)->first();//查詢一條數據
where():
基本的>、<、=、<>條件,當爲=時可省略
可做區間條件:\DB::table('tableName')->where([[''id,'>=',2],['id','<=',5]])->get();
like匹配:\DB::table('tableName')->where([[''name,'like','%2%'],[''id,'<=',5]])->get();//and形式
\DB::table()->where()->orwhere()->get();//or形式
wherebetween&&whereNotBetween:
\DB::table('tableName')->whereBetween('id',[10,15])->get();
\DB::table()->whereNotBetween()->get()
whereIn&&whereNotIn:
\DB::table()->whereIn('id',[1,2,4,6,7])->get();
\DB::table()->whereNotIn()->get();
whereNull&&whereNotNull:
\DB::table()->whereNull('字段')->get()
\DB::table()->whereNotNull('字段')->get();
value():
\DB::table('tableName')->where('id',2)->value('name');//只取出這個字段的值
pluck():
\DB::table()->pluck();//取出一列數據
聚合:
\DB::table()->count();//總數
\DB::table()->max('字段');//最大值
\DB::table()->min('字段');//最小值
\DB::table()->avg('字段');//平均值
\DB::table()->sum('字段');//求和
使用mysql原生函數:
例如:獲得查詢字段的總數
\DB::table('tableName')->select(DB::raw('count(*)' tot))->get();
7、blade模版引擎
引用簡書文章http://www.jianshu.com/p/7d65f9eb94be