laravel框架基礎知識總結

 

1、laravel簡介

laravel是一套優雅簡介的PHP開發框架,受歡迎程度很是之高,功能強大,工具齊全;如下是本人在學習過程當中記錄的laravel比較基礎的資料,權當學習筆記,請大神們多多指教php

2、版本選擇

本篇學習筆記以laravel5.2.15版本爲框架的版本基礎;更多版本請移步https://www.golaravel.com/css

3、laravel下載安裝以及開發環境搭建

(一):環境搭建

  因爲laravel使用較多的php新特性,因此新版本的laravel對PHP的版本要求比較高,這裏選擇的laravel5.2.15要求 PHP>5.5.9+ 。Win系統下推薦使用集成的開發環境好比wamp、phpStudy、Xampp均可以,下載安裝的時候須要注意PHP版本,Linux系統下須要編譯安裝,這裏推薦一篇博客https://www.linuxidc.com/Linux/2016-10/136327.htm(ubuntu下lamp開發環境搭建)。本篇學習筆記也是基於lamp環境下html

(二):下載、安裝及大體介紹

  一、安裝包下載安裝

  本來laravel中文網是能夠下載一鍵安裝包的,可是等我去下載的時候發現沒地方能夠下載,也只能經過度娘找其它下載資源下載安裝包而後安裝;個人資源:https://github.com/yuwenbo5/laravel5.2.15.git;下載安裝包後解壓更更名稱(laravel),直接拷貝到環境根目錄www(win下wamp環境)或者 /var/www/html(linux下lamp環境)中;打開瀏覽器輸入url:localhost/laravel/public 而後回車,出現以下畫面表示安裝成功:mysql

  二、composer安裝

  cd到環境根目錄,使用命令:composer create-project --prefer-dist laravel/laravel=5.2.15  laravel(項目名稱,可修改)linux

  三、簡單介紹

  laravel是基於mvc模式的php框架,m——模型層,v——視圖層,c——控制器層;如下爲laravel框架的目錄文件,框出來的文件目錄將在後續中用到:laravel

  

  app是應用的核心代碼文件目錄,之後的代碼基本都在這裏完成;app/Http/Controller目錄是應用的控制器文件;routes.php是框架的路由文件,負責路由分配和映射;Http下的類文件,好比上面目錄中的User.php、Menu.php文件是應用的模型文件;config目錄是全部應用的配置文件目錄;public是框架的入口文件及靜態資源文件目錄;resources/views則是應用的視圖文件目錄。git

4、laravel路由

  (一):簡介

  用過thinkPHP的開發者都知道,傳統的MVC的url都是對應應用的控制器及控制器中的方法,laravel中的MVC則是經過路由功能映射到對應的程序(控制器方法),經過路由將用戶的請求發送到對應的程序進行處理,其做用就是創建url和處理程序之間的映射關係,這樣作有一個好處,對url進行美化只須要修改路由而無需對程序自己進行修改。github

  laravel中請求類型包括:get、post、put、patch、delete。正則表達式

  前面說了route.php是laravel的路由文件,全部的路由映射都要經過編輯route.php文件進行代碼書寫。sql

  (二):路由學習

    一、基本路由

    get請求:

複製代碼
 1 <?php
 2 
 3 //基本路由的get請求
 4 
 5 Route::get('get_base', function(){
 6     return 'get request base';
 7 });
 8 
 9 
10 瀏覽器輸入:http://127.0.0.1/laravel/public/get_base
11 頁面輸出:get request base
複製代碼

    post請求:

複製代碼
 1 <?php
 2 
 3 //基本路由的post請求
 4 
 5 Route::post('post_base', function(){
 6     return 'post request base';
 7 });
 8 
 9 
10 以上路由須要經過post方式請求,這裏不作演示
11 請求後頁面輸出:post request base
複製代碼

 

    二、多請求路由

    顧名思義,多請求路由則是能夠經過多種請求方式進行請求,多請求路由主要有兩種方式,match和any

    (1)、match接收請求類型的數組從而限定請求的類型:

複製代碼
 1 <php
 2 
 3 //多請求路由match
 4 
 5 Route::match(['get','post'], 'multi', function(){
 6     return 'multi post or get';
 7 });
 8 
 9 url:http://127.0.0.1/laravel/public/multi
10 此路由可經過get、post請求
11 請求後返回字符串:multi post or get
複製代碼

    

    (2)、any方式

複製代碼
 1 <?php
 2 
 3 //any方式
 4 
 5 Route::any('multi', function(){
 6    return 'multi get or post';
 7 });
 8 
 9 
10 url:http://127.0.0.1/laravel/public/multi
11 請求返回字符串:multi get or post
複製代碼

 

    三、路由參數

    給路由綁定參數,接收參數進行處理

    (1)、必選參數

複製代碼
 1 <?php
 2 
 3 //帶參數的路由
 4 
 5 Route::get('myname/{name}', function($name){
 6     return 'my name is '.$name;
 7 });
 8 
 9 
10 url:http://127.0.0.1/laravel/public/myname/yuwenbo
11 get訪問後頁面輸出:my name is yuwenbo
複製代碼

 

     (2)、可選參數($userid=null表示默認值,可設置沒有參數時的默認值)

複製代碼
 1 <?php
 2 
 3 //可選參數綁定
 4 
 5 Route::get('user/{userid?}', function($userid=null){
 6     return 'userid is '.$userid;
 7 });
 8 
 9 訪問url:http://127.0.0.1/laravel/public/user/username
10 輸出:userid is username
11 
12 訪問url:http://127.0.0.1/laravel/public/user
13 輸出:userid is
14 
15 可選參數綁定使得路由很靈活
複製代碼

 

    (3)、路由參數過濾(用正則表達式對傳入的參數進行過濾)

複製代碼
 1 <?php
 2 
 3 /*
 4 參數過濾
 5 */
 6 
 7 //單個參數過濾
 8 Route::get('num/{num?}', function($num=15){
 9     return 'this num is '.$num;
10 })->where('num','[0-9]+');
11 
12 訪問url:http://127.0.0.1/laravel/public/num/5
13 返回輸出:this num is 5
14 
15 訪問url:http://127.0.0.1/laravel/public/num
16 返回輸出:this num is 15
17 
18 訪問url:http://127.0.0.1/laravel/public/num/fhdja
19 頁面報錯
20 
21 //多個參數過濾
22 Route::get('info/{name}/{age?}', function($name,$age=null){
23     return 'name is '.$name.', age is '.$age;
24 })->where(['name' => '[a-zA-Z]+', 'age' => '[1-9]+']);
25 
26 可以使用數組形式過濾多個參數
複製代碼

 

    四、路由別名

    給路由經過['as' => 'alias']數組使用別名後,可經過route('別名')生成url,請看代碼理解:

複製代碼
 1 <?php
 2 
 3 //路由別名
 4 
 5 Route::get('student/info',['as' => 'studentInfo' ,function(){
 6 
 7     //經過route('studentInfo')生成完成url後返回
 8     return route('studentInfo');
 9 
10 }]);
11 
12 
13 訪問url:http://127.0.0.1/laravel/public/student/info
14 頁面返回:http://127.0.0.1/laravel/public/student/info
15 
16 注:別名的好處在於,之後在控制器中使用route('別名')的方式生成url後,即使修改了路由的名字,也不用再修改控制器程序,由於經過別名程序能自動生成修改後的url
複製代碼

 

    五、路由羣組

    經過關鍵字group建立路由羣組

複製代碼
 1 <?php
 2 
 3 /*
 4 *路由羣組
 5 */
 6 
 7 Route::group(['prefix' => 'admin'], function(){
 8     
 9     //此時的訪問地址:http://127.0.0.1/laravel/public/admin/student/info
10     Route::get('student/info',['as' => 'studentInfo' ,function(){
11         return route('studentInfo');
12     }]);
13 
14     //此時的訪問地址:http://127.0.0.1/laravel/public/admin/info/yuwenbo/20
15     Route::get('info/{name}/{age?}', function($name,$age=null){
16         return 'name is '.$name.', age is '.$age;
17     })->where(['name' => '[a-zA-Z]+', 'age' => '[1-9]+']);
18     
19 });
20 
21 此時的訪問地址url必需要加上羣組前綴,不然將不能訪問
複製代碼

    六、路由中輸出視圖

    經過view()函數輸入視圖

複製代碼
 1 <?php
 2 
 3 /**
 4 * 路由中輸出視圖
 5 */
 6 
 7 //框架的歡迎界面路由
 8 
 9 Route::get('/',function(){
10    return view('welcome');
11 });
12 
13 訪問url:http://127.0.0.1/laravel/public
14 瀏覽器顯示laravel的歡迎界面
15 
16 
17 //作以下修改
18 Route::get('welcome',function(){
19    return view('welcome');
20 });
21 
22 修改後訪問url:http://127.0.0.1/laravel/public/welcome
23 瀏覽器一樣顯示laravel的歡迎界面
複製代碼

    通常狀況是不會在路由中輸出視圖的。

 

5、控制器

  控制器目錄app/Http/Controller,此目錄下有一個基本的控制器Controller,新增的控制器統一繼承此Controller;

  命名空間:namespce  App\Http\Controller;

  命名規則:控制器文件名跟類名統一首字母大寫,以 控制器名+Controller 爲命名規則,好比新建一個控制器 :AdminController.php

複製代碼
 1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: Administrator
 5  * Date: 2018/8/25/025
 6  * Time: 0:51
 7  */
 8 
 9 namespace App\Http\Controllers;
10 
11 class AdminController extends Controller
12 {
13     public function index()
14     {
15         return view('admin/index');
16     }
17 }
18 
19 
20 新建控制器AdminController繼承於基類Controller
複製代碼

 

 一、路由關聯控制器,經過路由訪問控制器程序:

複製代碼
 1 <?php
 2 
 3 //路由關聯映射控制器方法一:
 4 
 5 Route::get('admin/index', 'AdminController@index');
 6 
 7 
 8 //路由關聯控制器方法二:
 9 
10 Route::get('admin/index', ['uses' => 'AdminController@index']);
11 
12 
13 //路由別名關聯控制器:
14 
15 Route::get('admin/index', [
16     'uses' => 'AdminController@index',
17     'as' => 'adminindex'
18 ]);
複製代碼

 

 二、路由關聯控制器進行參數綁定:

複製代碼
 1 //路由書寫 route.php
 2 <?php
 3 //結合以前學習的參數過濾
 4 Route::get('admin/index/{num}', [
 5     'uses' => 'AdminController@index',
 6     'as' => 'adminindex'
 7 ])->where('num', '[0-9]+');
 8 
 9 ?>
10 
11 
12 
13 //控制器代碼 AdminController.php
14 <?php
15 /**
16  * Created by PhpStorm.
17  * User: Administrator
18  * Date: 2018/8/25/025
19  * Time: 0:51
20  */
21 namespace App\Http\Controllers;
22 
23 class AdminController extends Controller
24 {
25     public function index($num)
26     {
27         return 'num is '.$num;
28     }
29 }
30 
31 ?>
32 
33 訪問url:127.0.0.1/laravel/public/admin/index/5
34 頁面輸出:num is 5
複製代碼

 

6、模型

   laravel框架的模型文件在app目錄下,統一首字母大寫,文件名與類名一致,統一繼承於 Illuminate\Database\Eloquent\Model 基類;

  (一)、新建模型及使用

複製代碼
 1 //模型文件 Admin.php
 2 <?php
 3 /**
 4  * Created by PhpStorm.
 5  * User: Administrator
 6  * Date: 2018/8/25/025
 7  * Time: 13:35
 8  */
 9 namespace App;
10 use Illuminate\Database\Eloquent\Model;
11 
12 class Admin extends Model
13 {
14     public static function getAdmin()
15     {
16         return 'this is admin model static getAdmin action';
17     }
18 
19 }
20 
21 ?>
22 
23 
24 //控制器文件 AdminController.php
25 <?php
26 /**
27  * Created by PhpStorm.
28  * User: Administrator
29  * Date: 2018/8/25/025
30  * Time: 0:51
31  */
32 namespace App\Http\Controllers;
33 
34 class AdminController extends Controller
35 {
36     public function index()
37     {
38         return Admin::getAdmin();
39     }
40 }
複製代碼

  (二)、數據庫操做

  鏈接數據庫mysql,laravel的數據庫鏈接只須要配置好數據庫的配置文件便可,也就是config目錄下的database.php

複製代碼
 1 //database.php文件
 2 
 3 
 4 'mysql' => [
 5             'driver' => 'mysql',
 6             'host' => env('DB_HOST', 'localhost'),
 7             'port' => env('DB_PORT', '3306'),
 8             'database' => env('DB_DATABASE', 'forge'),
 9             'username' => env('DB_USERNAME', 'forge'),
10             'password' => env('DB_PASSWORD', ''),
11             'charset' => 'utf8',
12             'collation' => 'utf8_unicode_ci',
13             'prefix' => 'shop_',
14             'strict' => false,
15             'engine' => null,
16      ]
17 
18 //配置文件讀取的是.env文件的內容
複製代碼

  打開.env文件,作以下配置修改便可鏈接到mysql數據庫

複製代碼
 1 APP_ENV=local
 2 APP_DEBUG=true
 3 APP_KEY=base64:IxkVvrRLqdJeU9h8vGu1W58OG3NVuDtkMWyC6nIT4qs=
 4 APP_URL=http://localhost
 5 
 6 //mysql鏈接配置
 7 DB_CONNECTION=mysql
 8 DB_HOST=localhost
 9 DB_PORT=3308
10 DB_DATABASE=shop
11 DB_USERNAME=root
12 DB_PASSWORD=root
13 
14 CACHE_DRIVER=file
15 SESSION_DRIVER=file
16 QUEUE_DRIVER=sync
17 
18 REDIS_HOST=127.0.0.1
19 REDIS_PASSWORD=null
20 REDIS_PORT=6379
21 
22 MAIL_DRIVER=smtp
23 MAIL_HOST=mailtrap.io
24 MAIL_PORT=2525
25 MAIL_USERNAME=null
26 MAIL_PASSWORD=null
27 MAIL_ENCRYPTION=null
複製代碼

   一、使用DB facade操做數據庫

     相似原生的sql語句進行curd操做,例如:新建一個表user包含id、username、passwrod、email、sex、create_time、update_time字段

複製代碼
 1 <?php
 2 /**
 3  * 使用DB facade進行CURD操做
 4  * Created by PhpStorm.
 5  * User: Administrator
 6  * Date: 2018/8/25/025
 7  * Time: 0:51
 8  */
 9 namespace App\Http\Controllers;
10 use App\Http\Controllers\Controller;
11 use Illuminate\Http\Request;
12 use Illuminate\Support\Facades\DB;
13 
14 class AdminController extends Controller
15 {
16 
17     public function query()
18     {
19         //查詢
20         $user_list = DB::select('select * from user');//返回數組
21 
22 
23         //新增
24         $bool = DB::insert('insert into user(username,email,sex) values(?, ? ,?)',
25 ['admin', 'example@mail.com', '1']);//返回布爾值
26 
27         //修改
28          $rows = DB::update('update user set password=? where username=?',['123456', 'admin']);//返回影響的行數
29 
30         //刪除
31         $rows = DB::delete('delete from user where username=?', ['admin']);//返回刪除的行數
32 
33     }
34 }
複製代碼

   使用DB facade操做數據庫,初學仍是很簡單的,由於原生的sql仍是比較熟的。

 

   二、使用查詢構造器操做數據庫

   使用查詢構造器進行數據庫操做使得操做簡介、方便,示例使用上面的user表進行演示

    查詢構造器----新增數據
複製代碼
 1 <?php
 2 /**
 3  * 查詢構造器之新增數據
 4  * Created by PhpStorm.
 5  * User: Administrator
 6  * Date: 2018/8/25/025
 7  * Time: 0:51
 8  */
 9 namespace App\Http\Controllers;
10 use App\Http\Controllers\Controller;
11 use Illuminate\Http\Request;
12 use Illuminate\Support\Facades\DB;
13 
14 class AdminController extends Controller
15 {
16 
17     public function query()
18     {
19         //插入一條數據
20         $bool = DB::table('user')->insert(
21             ['username' => 'yuwenbo', 'email' => 'example@mail.com', 'sex' => 1]
22         );//返回布爾值
23 
24         //插入一條數據返回插入的id
25         $insert_id = DB::table('user')->insertGetId(
26             ['username' => 'yuwenbo', 'email' => 'example@mail.com', 'sex' => 1]
27         );
28 
29 
30         //插入多條數據
31         $bool = DB::table('user')->insert([
32             ['username' => 'yuwenbo', 'email' => 'example@mail.com', 'sex' => 1],
33             ['username' => 'tom', 'email' => 'example@mail.com', 'sex' => 0]
34         ]);
35 
36     }
37 
38 }
複製代碼
    查詢構造器-----更新數據:更新指定內容和自增自減兩種方式
複製代碼
 1 <?php
 2 /**
 3  * 查詢構造器之更新數據
 4  * Created by PhpStorm.
 5  * User: Administrator
 6  * Date: 2018/8/25/025
 7  * Time: 0:51
 8  */
 9 namespace App\Http\Controllers;11 use App\Http\Controllers\Controller;
12 use Illuminate\Http\Request;
13 use Illuminate\Support\Facades\DB;
14 
15 class AdminController extends Controller
16 {
17 
18     public function query()
19     {
20         //更新指定內容
21         $rows = DB::table('user')->where('username','admin')->update(['password' => '123456']);//返回影響的行數
22 
23         //更新自增自減
24         $rows = DB::table('user')->where('username','admin')->increment('sex');//自增1
25         $rows = DB::table('user')->where('username','admin')->increment('sex',$n);//自增n
26 
27         $rows = DB::table('user')->where('username','admin')->decrement('sex');//自減1
28         $rows = DB::table('user')->where('username','admin')->decrement('sex',$n);//自減n
29 
30         //自增同時修改其它內容
31         $rows = DB::table('user')->where('username','admin')->increment('sex', 3, ['email' => '4546464684@mail.com']);//自增同時修改內容
32 
33     }
34 
35 }
複製代碼

 

    查詢構造器----刪除數據
複製代碼
 1 <?php
 2 /**
 3  * 查詢構造器之刪除數據
 4  * Created by PhpStorm.
 5  * User: Administrator
 6  * Date: 2018/8/25/025
 7  * Time: 0:51
 8  */
 9 namespace App\Http\Controllers;
10 use App\Http\Controllers\Controller;
11 use Illuminate\Http\Request;
12 use Illuminate\Support\Facades\DB;
13 
14 class AdminController extends Controller
15 {
16 
17     public function query()
18     {
19         //刪除數據
20         $rows = DB::table('user')->where('username','admin')->delete();
21 
22         //清空數據(危險,謹慎使用)
23         DB::table('user')->truncate();
24 
25     }
26 
27 }
複製代碼

 

    查詢構造器-----查詢數據
複製代碼
 1 <?php
 2 /**
 3  * 查詢構造器之查詢數據
 4  * Created by PhpStorm.
 5  * User: Administrator
 6  * Date: 2018/8/25/025
 7  * Time: 0:51
 8  */
 9 namespace App\Http\Controllers;
10 use App\Http\Controllers\Controller;
11 use Illuminate\Http\Request;
12 use Illuminate\Support\Facades\DB;
13 
14 class AdminController extends Controller
15 {
16 
17     public function query()
18     {
19         //返回全部的數據get()
20         $user_list = DB::table('user')->get();
21         $user_list = DB::table('user')->where('id','>=',2)->get();
22 
23         //多條件查詢
24         $user_list = DB::table('user')->whereRaw('id >= ? and sex = ?', ['5' ,'1'])->get();
25 
26         //按照默認排序返回第一條數據first()
27         $user = DB::table('user')->first();
28         $user = DB::table('user')->orderBy('id','desc')->first();
29         $user = DB::table('user')->where('id', 2)->first();
30 
31         //返回結果集中指定的字段pluck
32         $usernames = DB::table('user')->whereRaw('id >= ? and sex = ?', ['5' ,'1'])->pluck('username');
33 
34         //返回指定字段的下標lists
35         $usernames = DB::table('user')->whereRaw('id >= ? and sex = ?', ['5' ,'1'])->lists('username', 'id');//以id做爲下標
36 
37         //返回指定的多個字段select()
38         $user_list = DB::table('user')->where('id', '>=', '1')->select('username','email','sex')->get();
39 
40         //每次查指定的條數chunk
41         DB::table('user')->chunk(2, function($user_list){
42             dd($user_list);
43         });
44 
45     }
46 
47 }
複製代碼

  mysql中的聚合函數對應的構造器方法count()、max()、min()、avg()、sum(),使用都比較簡單也很好理解,這裏再也不贅述

 

7、視圖

  laravel框架的視圖支持原生的php文件,視圖的目錄 resources/views;

  命名:統一以.php爲後綴的PHP文件,規則:視圖名+.+blade,例如新建一個視圖文件:index.blade.php

  通常狀況下一個控制器會建一個視圖目錄,例如AdminController控制器,咱們將在views下新建一個admin目錄

 (一)、新建視圖

1 //模板文件 views/admin/index.blade.php
2 
3 this is views/admin/index.blade

 (二)、輸出視圖

複製代碼
 1 //路由文件
 2 <?php
 3     //綁定控制器方法
 4     Route::get('admin/index', 'AdminController@index');
 5 
 6 ?>
 7 
 8 
 9 //控制器文件 AdminController.php
10 <?php
11 /**
12  * Created by PhpStorm.
13  * User: Administrator
14  * Date: 2018/8/25/025
15  * Time: 0:51
16  */
17 namespace App\Http\Controllers;
18 
19 class AdminController extends Controller
20 {
21     public function index()
22     {
23         return view('adminindex');//傳入要輸出的模板名便可
24     }
25 }
26 
27 訪問url:http://127.0.0.1/laravel/public/admin/index
28 頁面顯示:this is views/admin/index.blade
複製代碼

 輸出視圖時能夠攜帶變量而後在模板中輸出出來,這點將在後面的模板的詳細使用中用到;

 (三)、模板詳解

  一、模板繼承

  因爲多數頁面有相同部分,因此使用模板繼承簡化模板使用;如下首先在views/common下新建一個基本的公共模板文件base.blade.php,公共的模板文件放在views/common文件夾下

  

  base.blade.php

  在views下新建首頁index.blade.php繼承公共模板文件

  index.blade.php

  模板繼承語法:@extends('目錄.文件名');例如:@extends('common.base'),就能夠繼承common目錄下的base.blade.php模板

  使用@section重寫子模板,使用@yield展現某個指定的section的內容;

  @yield不能被子模板擴展,@section能夠被子模板擴展

  若是須要展現父模板內容,可以使用@parent;例如:

1 @extends('common.base')
2 
3 @section('header')
4     @parent
5     header
6 @stop

 

  二、基礎語法及使用

  輸出變量,使用{{ $變量名 }},以下所示:

複製代碼
 1 //例如控制器中
 2 
 3 public function index(){
 4        
 5         return view('index',['name' => 'yuwenbo']);
 6 
 7 }
 8 
 9 
11 
12 //模板中輸出index.blade.php
13 
14 
15 <p>{{ $name }}</p>
16 
17 
18 結果輸出:yuwenbo
複製代碼

  

  使用php函數,blade模板容許咱們使用原生的php,也能夠在模板中使用函數及運算符

複製代碼
 1 //模板中使用php函數
 2 
 3 
 4 //輸出時間戳
 5 <p>{{ time() }}</p>
 6 
 7 //格式化當前時間
 8 <p>{{ date('Y-m-d H:i:s', time()) }}</p>
 9 
10 //三元運算符
11 <p>{{ in_array($name,$array) ? 'true' : false }}</p>
複製代碼

  模板中短語法:{{ isset($age) ? $age : 'default value' }}  等同於  {{ $age or 'default value' }}

 

  原樣輸出:

  使用@{{ $count }}便可原樣輸出 ‘{{ $count }}’。

 

  子視圖引入

  使用@include關鍵字;例如在views下新建模板leftmenu.blade.php

複製代碼
 1 @extends('common.base')
 2 
 3 @section('header')
 4     @parent
 5     header
 6 @stop
 7 
 8 @section('leftmenu)
 9     //引入子視圖
10     @include('leftmenu')
11 @stop
複製代碼

 

  三、流程控制

  if判斷語句

複製代碼
1 //if流程判斷語句
2 
3 @if($user == 'admin')
4    i am admin
5 @elseif($user == 'yuwenbo')
6    i am yuwenbo
7 @else
8    i am default
9 @endif
複製代碼

  for循環語句

1 //for循環語句
2 
3 @for($i = 1; $i <= 10; $i ++)
4     <p>i is {{ $i }}</p>
5 @endfor

  foreach循環語句

複製代碼
 1 //控制器
 2 public function index()
 3 {
 4      $data_list = array('name' => 'yuwenbo', 'age' => 22, 'job' => 'php');
 5 
 6      return views('index', ['data' => $data_list]);
 7 }
 8 
 9 
10 //視圖輸出
11 @foreach($data as $key => $val)
12     {{ $key }} => {{ $val }}
13 @endforeach
複製代碼
複製代碼
 1 //控制器
 2 public function index()
 3 {
 4      $data_list = array(
 5          array('name' => 'admin', 'age' => 20),
 6          array('name' => 'word', 'age' => 18)
 7      );
 8 
 9      return views('index', ['data' => $data_list]);
10 }
11 
12 
13 //模板輸出
14 @foreach($data as $key => $val)
15     <p>name is {{ $val->name }}, age is {{ $val->age }}</p>
16 @endforeach
複製代碼

 

  四、模板中使用url

  url()-->經過路由的名字生成url

  action()-->經過指定控制器及方法名生成url

  route()-->經過路由別名生成url

複製代碼
 1 //路由 route.php
 2 
 3 Route('index',[
 4     'uses' => 'IndexController@index', 
 5     'as' => 'in'
 6 ]);
 7 
 8 
 9 
10 //模板中生成url的方式
11 
12 <a href="{{ url('index') }}">url方式</a>
13 
14 <a href="{{ action('IndexController@index') }}">action方式</a>
15 
16 <a href="{{ route('in') }}">route方式</a>
17 
18 
19 //以上三種方式均生成url:
20 http://127.0.0.1/laravel/public/index
複製代碼

   以上三種方式在實際使用時均可以用,通常狀況下,使用url()和route()較多,由於寫法簡介方便

 

=================================================================================================================================

1.請求類型
get , put , post , patch , delete 等
2.路由訪問方式
get , post , any , match(['get',post])
3.路由傳參
Route::get('user/{id}' ,function ($id){
});
Route::get('user/{name}/{id}',function($name,$id){
});
4.傳遞可選參數
Route::get('user/{name?}',function($name = value){
});
5.參數限制
Route::get('user/{name}',function(){})->where('name','[A-Za-z] + ');
Route::get('user/{id}/{name}',function(['id'=>'[0-9]+','name'=>'[a-z]+']));
6.模版中的寫法
<h1><?php echo $title; ?></h1>
<p> {{$msg}}</p>
7.建立數據庫
create database 庫名 charset utf8
8.修改配置文件
在.env文件中進行修改
9.建立遷移文件
php artisan make:migration create_good_table --create=goods
執行這句命令 php artisan migrate
10.建立Model 文件控制表名,主鍵
php artisan make:model 表名
11.遷移文件操做
up()負責建表,加列,加索引
down()負責刪表,減列,去索引
public function up(){
Schema::table('goods',function(Blueprint $table){
   添加
   $table->char('email',50);
});
Schema::table('goods',function ($table{
刪除
$table->dropColumn('email');
}));
}
12.數據庫遷移一操做
php artisan migrate:rollback 會退
php artisan migrate:reset 回退到初始狀態
13.DB類操做數據庫(Model)
insert 添加操做
DB::table()->insert(插入字段);(插入一維多維數組,返回true,false)
14.插入後返回主鍵值,獲取主鍵值  insetrGetld();
$id = DB::table('goods')->insertGetId($rows);
15.update 修改操做
.典型的修改
DB::table('users')->where('id',1)->update(['age'=>19]);
至關於
update users set age = 19 where id =1;
在某值的基礎上增加或者減小(默認1)
增加increment('健',步長);減小decrement();
16.delete刪除操做
var_dump(DB::table('goods')->where('id','>',3)->delete());
where 有三個參數是,第二個參數當作運算符
17.select查找
DB::table('goods')->get();
DB::table('goods')->where('id','>',6)->get();
DB::table('goods')->select('id','email')->where()->get();
DB::table('goods')->where('id',6)->first();
18.表單提交要加一段_token();
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
19.不解析模版和防xss 攻擊
在前段模版引擎中,用{{}}作表籤邊界
爲防止blade 模版去解析前面加@
例如@{{$jang}}
['code'=>'<script>alert(1)</scriptt>']
&lt;script&gt;alert(1)&lt;/script&gt;
20.Model 放在/app目錄下面,命名空間App
Model 繼承Illuminate\Database\Eloquent\Model
引入new \App\Msg()
21.自動生成和實例化
php artisan make:model Msg
22.增長 
$msg->save();
23.查找
按鍵值查找
Msg::find($id);
按where 條件查找具體的那一條
Msg::where('id','>',3)->first();
查找多行all() 和 get()
24.delete 刪除
Msg::where('id',$id)->delete();
25.複雜查詢
asc   升序        desc 降序
orderBy('id','desc')  根據id排序
Msg::count();數數
Msg::avg('id');求平均值
Msg::min('id');最小值最大值
Msg::sum('id');求和
26.與Model有個約定
調整表名,主鍵值,屏蔽新增鍵值
27.控制器的生成
php artisan make:controller ArticleController --plain
--plain 去掉默認顯示的
28.緩存位置
config/cache.php 默認用到的緩存驅動 file  其餘緩存Memcached 和Redis
30.緩存調用
use Illuminate/Support/Facades/Cache
Cache::put('key','value',$minutes);
31.添加緩存
換存不存在添加緩存,緩存已經存在返回true,不然false
Cache::add('key','value',緩存時間);
持久話存儲緩存
Cache::forever('key','val');
儲存緩存放在storage/framework/
32.獲取緩存
Cache::get('key','default');
若是有緩存輸出緩存若是沒有緩存返回default
pull 獲取緩存後刪除
33.刪除緩存
Cache::forget('key');
清除所用緩存
Cache::flush();
判斷緩存是否存在
Cache::has('key');
34.Request對象
請求方式(get/post)
請求參數($\post,$\FILES)
請求路徑(域名後的部分)
請求Cookie等諸多信息
input 函數
35.利用Request對象作文件上傳
Route::get('msg/fil','MsgController@fil');
Route::post('msg/ups','MsgController@ups');
控制器
public function fil(){
return view('msg.fil');
}
public function ups(){
$req->file()->move('上傳文件地址',爲文件起的名字);
}
判斷文件上傳是否成功
isvalid();即實例變量的值是不是個有效的對象句柄
hasFile();屬性獲取一個值,該值指示 FileUpload 控件是否包含要上載的文件。 在對要上載的文件執行操做以前,使用該屬性來驗證該文件是否存在
 
36.隱式控制器
Route::controller('article','ArticleController');
 
37.資源控制器
make:controller ArtisanController
Route::resource('article','ArticleController');
查看功能
php artisan route:list
 
38.laravel 緩存應用
靜態緩存,查詢緩存,數據緩存
靜態緩存:緩存的整個頁面;
動態緩存:存儲數據庫中的數據進行了緩存,既「經過動態緩存,不須要再讀取數據庫了,直接經過緩存文件來調取相應的數據」;
動態緩存:直接從緩存中讀取,不通過數據查詢;
 
39.緩存
存儲緩存
Cache::put('key','value',$minutes);
 
40.laravel 中的路由與TP中的相比較
laravel 中的路由很是靈活,TP的路由是  模塊/控制器/方法 TP 不能叫路由,只是URL與控制器的對應關係,或者叫URL分發;
41. 設計區別laravel 鏈接網站的全過程,數據庫+MVC+錯誤處理
 
42.laravel
array_collapse  函數將數組的每個數組摺合成單個數組:
str_limit('字符串',$num);  該函數接受一個字符串做爲參數,以及最大字符數量做爲第二個參數;
str_random();函數生成指定長度的隨機字符串
e 函數對指定字符串進行實體轉義,至關於htmlentities;
echo e('<html>foo<html>');
&lt;html&gt;foot;/html&gt
app_path()  返回當前項目的絕對路徑 app 目錄下的絕度路徑
$path = app_path();
base_path() 返回項目的絕對路徑
$path= base_path();
config_path() 返回項目的配置文件所在目錄
public_path() 返回項目的公共文件所在目錄(js,css,img ...)
attempt()  驗證信息
url() 生成規則url
action() 配合路由器,生成規範 URl
bcrypt() 加密密碼  (用戶密碼加密能夠在建立數據庫時進行加密)
config()  讀取 配置值
csrf_field()  laravel 防止跨網站請求僞造攻擊 用該命令用於驗證受權用戶和發送請求是不是同一個用戶
<form method="post" actisan="/">
{{ csrf_field() }}
...........
</form>
request() 獲得當前的request 對象
$req = request();
dd($req);
 
43.表單類型
primary (key)      主鍵值
string          字符串
enum          選擇(‘男’,‘女’)
integer        整形
tinyint         整形(佔一個字節)
int                整形(佔四個字節)
auto_increment   屬性自增
rememberToken()  laravel 中記錄用戶cookie
 
 
44.在模版中直接打印出錯狀況
{{print_r($errors)}}
 
45.路由分組
Route::group(
['prefix'=>'auth','namespace'=>'Auth'],
function(){
Route::get();
Route::post();
}
);
 
46.獲取登入用戶信息
$user = Auth::user();
$user = $request->user();
經過$user 實例化,能夠拿到當前登入用戶的信息
public function jiePost(Request $req){
$user = $req->user();
 
}
 
47. 控制器模版展現view('she',['pro'=>$pro,'att'=>$att]);  已數組的形式進行展現
 
48.頁面跳轉
redirect('/prolist');
 
49.where 的用法
where('name','like','T%')
whereBetween('votes',[1,100]);    在某值的範圍中
whereNotBetween();                      不在某值的範圍中
insertGetId   自增ID
intval();                                             將變量轉成整形
 
50.中間件
if else 判斷的愈來愈多,會使代碼更加難維護,系統間的的偶合性會增長,中間件解決了這個問題
生成中間件
php artisan make:middleware EmailMiddleware
生成的中間件位於
/app/Http/Middleware/EmailMiddleware
 
51.strtoupper()     函數把字符串轉化爲大寫
52.分頁功能
DB::table()->paginate(2);
return view('myze',['hks'=>$h]);
相關文章
相關標籤/搜索