# 2018-01-21

#? 一骂远、框架概述

# 課程概述

1. laravel 4天(之前TP框架還是很大的區(qū)別)(國外框架)

2. 在線教育平臺 6天(laravel熟悉+插件+開發(fā)模式)

---

1. dedecms 二次開發(fā)

2. CI框架

## 1、什么是框架儡陨?

框架是許多代碼的集合,為項目開發(fā)提供了很多基礎(chǔ)性的代碼。例如常見的參數(shù)過濾琼懊,DB類的封裝皱埠、文件上傳類肮帐,圖片處理類,驗證碼類等等漱逸。程序員只需要將重心放置到業(yè)務(wù)邏輯的實現(xiàn)泪姨,加快開發(fā)的速度。

一個項目 = 功能性代碼(框架提供) + 業(yè)務(wù)邏輯(自己編寫)

**什么是MVC的開發(fā)思想饰抒?**

M 是 Model的簡寫肮砾,負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)處理。

V 是 View的簡寫袋坑,負(fù)責(zé)顯示數(shù)據(jù)和收集數(shù)據(jù)仗处。

C 是Controller的簡寫,負(fù)責(zé)協(xié)調(diào)(調(diào)度)左右枣宫。

問題:

1. 在MVC設(shè)計思想里面婆誓,哪一個是最重要的?

答:M最重要也颤,數(shù)據(jù)的處理洋幻。(MVC 首當(dāng)其沖是M)

2. 在MVC設(shè)計思想里面,和用戶直接產(chǎn)生關(guān)聯(lián)的是哪一個翅娶?

答:C 控制器文留,地址欄 url地址----》模塊下控制器下方法

http://local.mvc.com/index.php/Home/View/login 方法(邏輯判斷 1. 載入視圖 get 2. 實例化模型post)

3. 在MVC里面如果沒有V視圖層的參數(shù),是否可以正常顯示數(shù)據(jù)竭沫?

答:MCT開發(fā)思想燥翅。(T template模板)可以

1. html 可以直接 echo "html標(biāo)簽";? $html = <<

html代碼

HTML;

**為什么要使用MVC開發(fā)思想?**

現(xiàn)在更多的是個人開發(fā)為主蜕提,但是實際工作開發(fā)肯定是團(tuán)隊合作為主森书。必然溝通的問題,協(xié)調(diào)的問題。主要是為了團(tuán)隊的協(xié)作凛膏。統(tǒng)一的規(guī)范進(jìn)行開發(fā)杨名,后期容易整合。最后的維護(hù)是容易译柏。

## 2镣煮、為什么要使用框架?(面試)

1. 代碼重用,很多通用的代碼可以復(fù)用鄙麦,例如做參數(shù)過濾典唇,可以封裝成一個函數(shù) I('get.id', 0, 'intval')

2. 開發(fā)者只需要關(guān)注業(yè)務(wù)代碼,不需要關(guān)注框架底層代碼實現(xiàn)胯府,例如數(shù)據(jù)庫的操作

原生:insert into sh_goods values(xx..x...) mysql mysqli pdo....

框架:D("Goods")->add(I('post.'))

3. 代碼量變少了介衔,開發(fā)速度快,開發(fā)周期短(40-60%)

4. 開發(fā)規(guī)范比較統(tǒng)一骂因,例如函數(shù)和類的命名炎咖,方便團(tuán)隊協(xié)作

原生:user.php aaaa.php? bbbbb.php afsdaf.php

框架:UserController.class.php

5. 后期的維護(hù)更加方便,同時功能模塊的擴(kuò)展也變得容易

弊端:使用框架劣勢寒波?

答:凡事都有兩面性乘盼。

+ 限制人的思維(必須按照框架的規(guī)則來做事)條條框框多(學(xué)習(xí)成本)(排斥新東西)

+ 兼容性(新版本升級)(TP3.2經(jīng)典? php7新特性,TP5里面寫的寫法俄烁,PHP7里面的特性全部發(fā)揮)(TP5使用很多)(TP5里面的大部分的單字母函數(shù)全部廢棄 I( ) C())(面試:問題 會TP5绸栅?)

+ 框架本身有性能消耗(為了解決開放性的問題,不得已要做很多的兼容性的處理)(開發(fā)優(yōu)先页屠、性能優(yōu)先)laravel開發(fā)優(yōu)先(運維:很少在程序上面出現(xiàn)性能問題粹胯、IO操作:mysql數(shù)據(jù)庫---》memcache內(nèi)存緩存、Redis....) laravel運行效率低(所有PHP框架里面允許效率最低)

+ .......

# 3辰企、PHP中的主流框架

**Zend Framework(俗稱zf框架)**

php語言公司官方(zend公司)開發(fā)的框架风纠,重量級框架;因為官方開發(fā)牢贸,所以需要考慮的方面很全面竹观,導(dǎo)致框架整體很臃腫。

![image.png](http://upload-images.jianshu.io/upload_images/267368-74379191d24b69aa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**YII(個人產(chǎn)品)**

中文叫做易框架潜索,重量級框架臭增,美籍華人薛強(qiáng)進(jìn)行開發(fā)的框架。最大的特點就是組件化帮辟、代碼復(fù)用速址。(不太適合新手進(jìn)行使用玩焰,里面的設(shè)計模式由驹、OOP概念理解很深、外貿(mào)電商使用的比較多)不建議:HTML代碼,建議HTML代碼全部使用PHP的類庫進(jìn)行輸出蔓榄。$form = new FormActive(); $form->open('post', 'url'....)很前端jQuery很緊密并炮。

![image.png](http://upload-images.jianshu.io/upload_images/267368-5917e2837de9ba02.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

最先在YII里面提出代碼的復(fù)用性的體現(xiàn),為了減少重復(fù)性代碼的開發(fā)甥郑。研發(fā)了一個叫做GII的模塊逃魄,也叫作**代碼生成器**、也叫作**腳手架**澜搅,主要是做輔助性的開發(fā)伍俘,用戶只需要輸入一下表名,即可生成對應(yīng)curd相關(guān)的代碼文件勉躺。這個東西太好用了癌瘾,所以很多框架爭相模仿,我們今天學(xué)習(xí)laravel也提供了類似的工具饵溅,叫做 artisan命令工具妨退,有了它可以非常快速的生成一些基礎(chǔ)性的代碼蜕企,例如控制器的生成咬荷、模型的生成等等......

> php artisan make:controller UserController

> php artisan make:model User

基本上所有的開發(fā):

商品模塊、會員模塊.....

1. 控制器(curd操作)

2. 模型(自動驗證轻掩、自動完成....)

3. 三個靜態(tài)頁(add\edt\lst)

處理:

輸入:sh_admin;

生成:五個文件....

**Symfony2(企業(yè)使用較多幸乒,大企業(yè)使用的偏多)**

重量級框架,國外框架放典。由于symfony框架開發(fā)的思想太超前了逝变,以至于在很早之前引入很多新的好的特性。后面很多的其他的產(chǎn)品都借鑒了該框架的特性奋构,出來了很多的衍生產(chǎn)品壳影,例如我們今天學(xué)習(xí) laravel框架,就是symfony的兒子(IOC容器)弥臼;同時還有YII框架里面也借鑒了symfony里面的特性(事件模型編程宴咧、javascript事件編程)。

最后還有一點需要注意径缅,symfony框架是很早之前就和**composer**進(jìn)行默契的配合掺栅。同時symfony框架的底層的模板引擎使用的是 twig 模板引擎。

![image.png](http://upload-images.jianshu.io/upload_images/267368-fabd0f4b7d69631e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**Laravel(重點)**

目前是一個非衬芍恚火的非逞跷裕火的**重路由**的框架。需要注意該框架是基于Symfony框架的(Symfony 底層使用composer這個類庫管理軟件)氏堤。在學(xué)習(xí)laravel之前還要學(xué)習(xí)一下composer這個軟件沙绝。

![image.png](http://upload-images.jianshu.io/upload_images/267368-0914cfb4a6f2d1c9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**Codelgniter (小型)**

CI框架,輕量級框架,國外框架(個人開發(fā)的產(chǎn)品闪檬,全國使用量星著,很多人喜歡將該框架作為基礎(chǔ)性的框架,然后在該框架上加入自己的代碼進(jìn)行封裝)粗悯,市場上有一定的應(yīng)用虚循。顯著的特點:按需加載。

![image.png](http://upload-images.jianshu.io/upload_images/267368-ce0f5bc3ebd87b53.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**ThinkPHP**

ThinkPHP是一個叫做劉晨的中國人開發(fā)的國產(chǎn)框架样傍。有中文官網(wǎng)横缔、中文幫助文檔、中文社區(qū)衫哥,以及豐富的百度搜索資源剪廉。所以ThinkPHP很適合作為入門級的開發(fā)框架(學(xué)習(xí)成本是最低)。

![image.png](http://upload-images.jianshu.io/upload_images/267368-26a2eee31218ba98.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

下面的介紹的框架都是C語言編寫的框架炕檩,是說這個框架本身是用C語言進(jìn)行編寫斗蒋,但是編寫完成之后,將它進(jìn)行編譯成一個 dll(Windows動態(tài)鏈接庫文件)(php_yaf.dll)笛质,然后在php.ini文件進(jìn)行引入泉沾。

**yaf框架**

Yaf,全稱 Yet Another Framework妇押,是由鳥哥(惠新宸)使用C語言進(jìn)行開發(fā)的一個高性能的可以作為PHP擴(kuò)展出現(xiàn)的框架跷究。(Yaf_Abstarct)

![image.png](http://upload-images.jianshu.io/upload_images/267368-57f381ceae73ad58.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

除了原生PHP的寫法 yaf框架的性能是最好的。

**phalcon框架(國外)**

Phalcon?是開源敲霍、全功能棧俊马、使用 C 擴(kuò)展編寫、針對高性能優(yōu)化的 PHP 5 框架肩杈。 開發(fā)者不需要學(xué)習(xí)和使用 C 語言的功能柴我, 因為所有的功能都以 PHP 類的方式暴露出來,可以直接使用扩然。?Phalcon?也是松耦合的艘儒,可以根據(jù)項目的需要任意使用其他對象。Phalcon是一套實現(xiàn)MVC架構(gòu)的高性能PHP應(yīng)用程序框架夫偶。(文檔很少)性能是僅此于yaf界睁。

![image.png](http://upload-images.jianshu.io/upload_images/267368-133e42c648774b9b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

php框架性能:

php原生開發(fā)(目前很多公司)> yaf框架(PHP的擴(kuò)展出現(xiàn),常駐內(nèi)存)>Phalcon> CI框架 > TP|YII > laravel > zf|symfony...

思考:

laravel為什么會在國內(nèi)流行兵拢?

1. 出現(xiàn)的時機(jī)是最合適的翻斟。

2. 代碼相對來說寫起來簡潔,用很少的代碼可以完全多一些说铃。

3. laravel設(shè)計思想就很超前访惜,其他的框架沒有及時去運用PHP最新的特性敞斋。并且laravel借鑒了很多其他的編程語言的特性,例如Java疾牲、ruby。

4. 擴(kuò)展性很好(設(shè)計模式)衙解。

5. 和composer有很好的配合阳柔,互利共贏。(百度:composer里面提供的類庫大部分是支持laravel)

6. 最后laravel對前端款框架支持也非常友好 laravel + vuejs

7. .....

## 4蚓峦、ORM機(jī)制

**什么是ORM機(jī)制舌剂?**

object relationship model 對象關(guān)系模型。由于現(xiàn)在開發(fā)的主流的思想是面向?qū)ο髮崿F(xiàn)(OOP)暑椰,面向?qū)ο蟮闹黧w是對象霍转。既然面向?qū)ο罂梢院芎玫娜ソ鉀Q現(xiàn)實的問題。

是否可以使用該思想來去操作數(shù)據(jù)庫一汽。數(shù)據(jù)庫的操作習(xí)慣使用結(jié)構(gòu)化的查詢語句 (SQL 第四代編程語言 select * from user where id = 1)(AI:程序員不值錢避消,電腦編程 美國:機(jī)器人炒股)。

是否可以使用面向?qū)ο蠓绞饺ゲ僮鲾?shù)據(jù)庫召夹?可以岩喷、映射關(guān)系

模型類(UserModel)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 表(sh_user) [行和列]

對象($userModel = new UserModel())? ? ? ? 表中記錄[一行]

屬性($userModel->username)? ? ? ? ? ? ? ? ? 表中字段(username、password)

方法 ($userModel->select()|find()|upate()|add())? 記錄的操作(curd)

## 5监憎、ORM的實現(xiàn)

既然ORM是一種思想纱意,是一種解決問題的方式。屬于一種抽象的行為鲸阔。那么應(yīng)該想辦法去實現(xiàn)該思想偷霉。實現(xiàn)的方式有很多種:

1.?AR模式(Active?Record?TP里面使用該方式實現(xiàn))

$userModel = D('User'); // 模型類 sh_user;

$userModel->username = 'andy';

$userModel->password = md5('admin88');

$userModel->add();

2.?eloquentORM機(jī)制(laravel里面的實現(xiàn))

3.?medoo機(jī)制(yaf框架里面有教,yaf框架里面是沒有模型層褐筛,模型自己實現(xiàn)?pdo功能已經(jīng)足夠強(qiáng)大)..............

[http://medoo.lvtao.net](http://medoo.lvtao.net)

了解:面向過程类少、OOP編程、AOP編程【面向切面編程】渔扎、面向組件編程....

# 二瞒滴、laravel框架

## 1、laravel簡介

laravel是目前一個比較主流的框架赞警,現(xiàn)在很多互聯(lián)網(wǎng)的公司基本都在使用該框架妓忍。該框架是基于symfony【國外一款非常流行的框架:由于國內(nèi)手冊不是很齊全,沒有多少公司使用】的一個國外的MVC框架愧旦。

![image.png](http://upload-images.jianshu.io/upload_images/267368-5aaf7fb328152642.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

官網(wǎng):[https://laravel.com/](https://laravel.com/)?

國內(nèi)訪問地址:[http://www.golaravel.com/](http://www.golaravel.com/)

中文社區(qū)網(wǎng)站:[https://laravel-china.org/](https://laravel-china.org/)

## 2世剖、開發(fā)環(huán)境要求

laravel框架有運行對環(huán)境是有嚴(yán)格要求的。(在Windows下建議使用集成開發(fā)環(huán)境phpstudy這個產(chǎn)品笤虫,目前還支持php7旁瘫,并且可以非常方便的做版本切換祖凫。)

![image.png](http://upload-images.jianshu.io/upload_images/267368-85aaa306ed837869.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

注意:如果要使用PHPstudy,則必須先關(guān)閉之前的wamp環(huán)境(例如Apache酬凳、MySQL服務(wù))

注意:安裝的過程中出現(xiàn)vc庫找不到惠况,使用下面的方式進(jìn)行處理

![錯誤解決](http://upload-images.jianshu.io/upload_images/267368-c10c065ceb5f7fce.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 3、laravel安裝方式簡介

1.?使用專業(yè)的軟件?composer?軟件宁仔,可以幫我們自動去互聯(lián)網(wǎng)下載開發(fā)過程中所需要的類庫文件和Linux下包管理器yum比較類似稠屠,和node.js里面npm?,也和前端里面bower相似翎苫。

簡介:[http://docs.phpcomposer.com/00-intro.html](http://docs.phpcomposer.com/00-intro.html)

國外鏡像:[https://packagist.org/](https://packagist.org/)

國內(nèi)鏡像:[https://pkg.phpcomposer.com/](https://pkg.phpcomposer.com/)

很多其他的語言都有對應(yīng)的包管理器权埠,但是唯獨PHP里面開啟是沒有的,這個時候就有人提出一種思想煎谍,把所有的PHP常見的類庫(上傳攘蔽、圖片處理、分頁類)統(tǒng)一放在一個PHP應(yīng)用商店呐粘。然后使用一定的工具進(jìn)行管理满俗,例如下載、更新..... 而這這樣的管理工具就是要學(xué)習(xí)的composer管理工具作岖。

2. 使用手工安裝漫雷,需要自己去下載laravel的框架的源碼。

[http://laravelacademy.org/resources-download](http://laravelacademy.org/resources-download)

## 4鳍咱、composer安裝laravel

1. 在安裝之前降盹,先配置一下composer使用國內(nèi)的鏡像源(只要使用一次即可)

> composer?config?-g?repo.packagist?composer?[https://packagist.phpcomposer.com](https://packagist.phpcomposer.com)

2. 命令行執(zhí)行如下的命令

> composer create-project laravel/laravel=5.1.*? local.laravel51.com? --prefer-dist

安裝后的界面:

![image.png](http://upload-images.jianshu.io/upload_images/267368-5140248fa64b3232.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 5、啟動laravel項目

laravel官方提供一個叫做artisan的腳本谤辜,可以幫我們快速的完成一些事情蓄坏,例如啟動項目,生成控制器文件丑念,模型文件..........

可以執(zhí)行如下命名的時候涡戳,必須是在laravel項目的根目錄

> php artisan serve

![image.png](http://upload-images.jianshu.io/upload_images/267368-a133395fbd04172a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

瀏覽器效果:

![image.png](http://upload-images.jianshu.io/upload_images/267368-5a903a6f5f9d9ce4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 6、手工安裝laravel

[http://laravelacademy.org/resources-download](http://laravelacademy.org/resources-download)

1. 將下載的文件復(fù)制到虛擬主機(jī)目錄

![image.png](http://upload-images.jianshu.io/upload_images/267368-c185e88d151675ee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2. 在Apache的配置文件配置一個虛擬主機(jī)【注意脯倚,需要指向 public目錄下】

```

? ? DocumentRoot "C:\phpStudy\WWW\laravel.dev\public"

? ? ServerName laravel51.dev

? ? ServerAlias phpStudy.net

? ? ? Options FollowSymLinks ExecCGI

? ? ? AllowOverride All

? ? ? Order allow,deny

? ? ? Allow from all

? ? ? Require all granted

```

3. 配置hosts文件

```

127.0.0.1 laravel51.dev

```

4. 瀏覽器訪問效果

![瀏覽器訪問](http://upload-images.jianshu.io/upload_images/267368-a24edacc299d1558.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 7渔彰、laravel目錄結(jié)構(gòu)分析

### 整體目錄

![整體目錄結(jié)構(gòu)](http://upload-images.jianshu.io/upload_images/267368-a2627528aec5fde8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### app目錄

![image.png](http://upload-images.jianshu.io/upload_images/267368-ec074cc97b9aeca5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### http目錄

![image.png](http://upload-images.jianshu.io/upload_images/267368-c72522de1711449a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### config目錄

config目錄:主要是存放配置文件信息,laravel的配置信息是分文件保存的推正。

![image.png](http://upload-images.jianshu.io/upload_images/267368-cdaf5df92f302447.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### database目錄

database目錄:數(shù)據(jù)遷移和種子文件恍涂。

![image.png](http://upload-images.jianshu.io/upload_images/267368-68f24fd65aaee8ad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

例如某個數(shù)據(jù)遷移文件:在項目開發(fā)和測試階段使用的較多,上線之后基本不用植榕。

![image.png](http://upload-images.jianshu.io/upload_images/267368-6b68c828b98086e9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### public目錄

public目錄:單入口和系統(tǒng)的靜態(tài)資源(css再沧、img、js尊残、uploads)

![image.png](http://upload-images.jianshu.io/upload_images/267368-9cc7679d66a6c38a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### resource目錄

resources目錄:存放視圖文件炒瘸。

![image.png](http://upload-images.jianshu.io/upload_images/267368-43085cedeb7e509d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### storage目錄

storage目錄:主要是存放緩存文件和日志文件淤堵,需要注意:如果是在Linux環(huán)境下,該目錄需要有可寫的權(quán)限

![image.png](http://upload-images.jianshu.io/upload_images/267368-98278e1a11871188.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### vendor目錄

vendor目錄:主要是存放第三方的類庫文件顷扩,laravel思想主要是共同的開發(fā)拐邪,不要重復(fù)的造輪子(例如:里面可能存在驗證碼類、上傳類隘截、郵件類)扎阶,還需要注意該目錄還存放laravel框架的源碼。注意:如果使用的composer軟件管理的技俐,composer下載的類庫都是存放在該目錄下的。

![image.png](http://upload-images.jianshu.io/upload_images/267368-cbf71b4e2ed701a1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### .env文件

.env文件:主要是設(shè)置一些系統(tǒng)相關(guān)的環(huán)境配置文件信息统台。config目錄里面的文件配置內(nèi)容一般都是讀取該文件里面的配置信息(config里面的配置項的值基本都是來自.env文件)雕擂。

![image.png](http://upload-images.jianshu.io/upload_images/267368-fec1e47618d52ca5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

# 三、laravel入門使用

## 1贱勃、路由簡介

因為laravel是一個**重路由**的框架井赌。

### 什么是路由?

答:路由就是用戶在地址欄里面輸入一個url地址后贵扰,交給后端的那個控制器下的那個方法進(jìn)行處理的規(guī)則仇穗。一般我們需要在專門的路由文件里面,進(jìn)行定義好戚绕。

### 為什么要使用路由纹坐?

答:laravel里面路由。最新的 TP5里面也是存在路由舞丛。

好處:

1. url地址變得非常的美觀耘子。(以前沒有路由都是通過偽靜態(tài)處理)

2. 隱藏網(wǎng)站的目錄結(jié)構(gòu)(t.cn/goods/index.php ?)(index.php?m=Home&c=User&a=lst)

3. 防范網(wǎng)絡(luò)攻擊.....

### 路由文件在哪里,以及規(guī)則如何編寫球切?

![image.png](http://upload-images.jianshu.io/upload_images/267368-a792ce31d511cfa4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 2谷誓、路由入門使用

```php

// laravel內(nèi)置了一個Route類,提供了很多方法 一般是根據(jù)http的請求來命名

// 例如: 1. get 2. post 3. any 4. match .....

// get方法是處理 get請求 第一個參數(shù):代表是請求的url地址的uri部分

// 第二個參數(shù):1. 匿名函數(shù) 2. 字符串(控制器下的某個方法)

// 1. 匿名函數(shù) 返回值作為http的響應(yīng)返回給瀏覽器

// 2. 控制器里面的方法執(zhí)行作為響應(yīng)

// url:http://local.laravel51.com/

Route::get('/', function () {

? return 'hello';

? ? // return view('welcome');

});

// url:http://local.laravel51.com/about

Route::get('/about', function () {

? return 'about';

? ? // return view('welcome');

});

```

## 3吨凑、視圖使用

### 視圖載入

學(xué)習(xí):

1. 視圖寫在哪里捍歪?

2. 視圖文件如何命名?

3. 視圖里面的內(nèi)容和編寫鸵钝?

4. 視圖是否可以分目錄管理糙臼?

5. 視圖如何被載入?

6. 如何視圖賦值恩商?

![image.png](http://upload-images.jianshu.io/upload_images/267368-9ca11002660ac67c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

效果:

![image.png](http://upload-images.jianshu.io/upload_images/267368-685bb88526ed1b77.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 4弓摘、blade模板引擎

### 截圖

1. 在routes.php里面定義一個/user/login路由

![image.png](http://upload-images.jianshu.io/upload_images/267368-4cb1cd0205f2149a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2. 建立 login.blade.php視圖文件

![image.png](http://upload-images.jianshu.io/upload_images/267368-b79bce23db55aeec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3. 在routes.php里面定義一個/blade路由

![image.png](http://upload-images.jianshu.io/upload_images/267368-fbdfea83d3d5ca76.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4. 建立 show.blade.php視圖文件

![image.png](http://upload-images.jianshu.io/upload_images/267368-bfa7826bcc84d9ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

5. 注意:laravel模板引擎和 vuejs的沖突解決

![image.png](http://upload-images.jianshu.io/upload_images/267368-3579778d8954cf06.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

### 代碼

#### routes.php路由文件

```php

/*

|--------------------------------------------------------------------------

| Application Routes

|--------------------------------------------------------------------------

|

| Here is where you can register all of the routes for an application.

| It's a breeze. Simply tell Laravel the URIs it should respond to

| and give it the controller to call when that URI is requested.

|

*/

// laravel內(nèi)置了一個Route類,提供了很多方法 一般是根據(jù)http的請求來命名 例如: 1. get 2. post 3. any 4. match .....

// get方法是處理 get請求 第一個參數(shù):代表是請求的url地址的uri部分 第二個參數(shù): 1. 匿名函數(shù) 2. 字符串(控制器下的某個方法)

// url:http://local.laravel51.com/

// 1. 匿名函數(shù) 返回值作為http的響應(yīng)返回給瀏覽器

// 2. 控制器里面的方法執(zhí)行

Route::get('/', function () {

? return 'hello';

? ? // return view('welcome');

});

// url:http://local.laravel51.com/about

Route::get('/about', function () {

? return 'about';

? ? // return view('welcome');

});

// 1. 視圖寫哪里痕届? 2. 視圖文件名如何命名? 3. 視圖里面內(nèi)容 4. 視圖是否可以分目錄管理 5. 視圖如何被載入 6. 如何視圖賦值

// url:http://local.laravel51.com/user/login

Route::get('/user/login', function () {

? // view() 函數(shù)是用于載入視圖的 視圖寫在哪里韧献? 如何命名末患?

? // /resources/views/視圖文件名稱.blade.php? 文件的后綴 .blade.php必須這樣,因為laravel內(nèi)部使用的一個模板:blade

? $info = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quod consequatur nisi excepturi debitis mollitia autem quis dolores error nulla, ea cumque vero quas beatae eveniet molestias expedita cupiditate. Itaque, culpa!'; // 賦值

? $title = 'Lorem ipsum dolor sit amet, consectetur.';

? // 兩種方式:

? // with 第一個參數(shù)是視圖調(diào)用名稱 第二個參數(shù)變量信息

? // 第二種: 直接給view函數(shù)傳遞第二個參數(shù)锤窑,關(guān)聯(lián)數(shù)組璧针,key視圖調(diào)用名稱 value變量信息

? $key = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Officiis alias assumenda dolorum vel animi quo mollitia possimus neque quod illum!';

? $age = 12;

? // 復(fù)合數(shù)據(jù)類型 [] 數(shù)組 php5.4語法

? $userData = [

? ? ['id' => 1, 'username' => 'Lorem ipsum dolor sit amet, consectetur adipisicing.'],

? ? ['id' => 2, 'username' => 'Lorem ipsum dolor sit.'],

? ? ['id' => 3, 'username' => 'ruby'],

? ];

? // 通過賦值操作可以在視圖里面顯示數(shù)據(jù)信息,但是通過第二種方式寫起來還是很麻煩渊啰。 key value key value

/*? ? return view('home.user.login', ['key' => $key, 'age' => $age, 'userData' => $userData])

? ? ? ->with('info', $info)

? ? ? ->with('title', $title);

*/? ? // 文件夾的分隔符使用的 /? laravel建議使用 .

? ? // 賦值簡化操作

? ? // compact('info', 'title', 'key', 'age', 'userData') 可以將數(shù)據(jù)轉(zhuǎn)換為 關(guān)鍵數(shù)組 參數(shù):是變量名

? ? return view('home.user.login', compact('info', 'title', 'key', 'age', 'userData'));

});

// 視圖里面的模板引擎 blade 1. 基本數(shù)據(jù)輸出 2. 復(fù)合數(shù)據(jù)類型輸出 3. 邏輯判斷

Route::get('/blade', function ()

{

? $title = '模板引擎';

? $userData = [

? ? ['id' => 1, 'username' => 'Lorem ipsum dolor sit amet, consectetur adipisicing.'],

? ? ['id' => 2, 'username' => 'Lorem ipsum dolor sit.'],

? ? ['id' => 3, 'username' => 'ruby'],

? ];

? $isBoolean = false;

? $info = '這個是真的探橱!';

? return view('show', compact('title', 'userData', 'info', 'isBoolean'));

});

```

#### show.blade.php視圖文件

```php

? blade模板引擎

原生PHP

? ? {{-- 短標(biāo)記語法PHP --}}

blade模板引擎

? ? {{-- 這兩個大括號被叫做 插值表達(dá)式,計算內(nèi)部的表達(dá)式绘证,最終的結(jié)果放置在這里 --}}

? ? {{-- vuejs 也是使用的插值表達(dá)式 --}}

{{ $title }}

{{? 1 + 1 }}

{{? 3 * 8 }}

邏輯運算

{{ !false }}

? ? {{-- 三目運算 --}}

{{ 1 > 2 ? '假的' : '真的' }}

復(fù)合數(shù)據(jù)類型輸出

? ? @foreach ($userData as $v)

序號: {{? $v['id'] }} 姓名: {{ $v['username'] }}

? ? @endforeach

? ? @if ( $isBoolean )

? ? ? {{? $info }}

? ? @endif

? ? @if ( $isBoolean )

? ? ? 這個是真的...........

? ? @else

? ? ? 假的的...........

? ? @endif

? {{-- 問題: laravel和 vue 相遇了? --}}

? ? ? {{-- 不想讓 laravel進(jìn)行解析隧膏,前端vuejs 在瀏覽器里面解析 --}}

? ? ? {{-- vuejs 前端MVVM框架 --}}

@{{? msg }}

? new Vue({

? ? el: '#box',

? ? data: {

? ? ? 'msg' : 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sint, distinctio doloremque assumenda dicta veritatis repellendus maxime ut commodi ipsum necessitatibus ullam nihil! Saepe ab labore aliquam facilis placeat id incidunt.'

? ? }

? });

```

#### login.blade.php視圖文件

```php

? user-login頁面

user-login頁面

原生PHP

blade模板引擎

{{ time() }}

復(fù)合數(shù)據(jù)類型: 數(shù)據(jù)遍歷操作

序號: 姓名:

? ? ? ? 用戶名:

? ? ? ? 密碼:

```

## 4、控制器使用

通過上面的操作嚷那,我們發(fā)現(xiàn)基本將代碼都寫在routes.php路由文件胞枕,這樣不利于后期的開發(fā)和維護(hù)。一般會將用戶的請求交給控制器下的某個方法來處理魏宽。在方法里面完成業(yè)務(wù)邏輯腐泻。

思考:

1. 控制器寫在哪里?

2. 控制器文件名如何命名队询?

3. 控制器里面的內(nèi)容如何編寫派桩?

4. 控制器里面如何載入視圖?

5. 控制器里面如何賦值蚌斩?

6. 控制器里面的方法如何被調(diào)用铆惑?

7. 如何在控制器里面實例化模型?

8. 如何通過模型獲取數(shù)據(jù)送膳?

## 5鸭津、artisan命令-控制器

## 使用 artisan 命令生成控制器的默認(rèn)行為

![image.png](http://upload-images.jianshu.io/upload_images/267368-0942ef30e2134408.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

效果:

![image.png](http://upload-images.jianshu.io/upload_images/267368-a9f8279682eddbaf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

代碼內(nèi)容:

![image.png](http://upload-images.jianshu.io/upload_images/267368-810f5d7c49b1f79d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 使用 artisan 命令生成控制器的不要帶方法

![image.png](http://upload-images.jianshu.io/upload_images/267368-4075040256eb0b20.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

代碼內(nèi)容:

![image.png](http://upload-images.jianshu.io/upload_images/267368-a3b814864ea7abe7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 使用 artisan 命令生成控制器的分目錄管理

![image.png](http://upload-images.jianshu.io/upload_images/267368-73daa1cc1df3af87.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

代碼內(nèi)容:

![image.png](http://upload-images.jianshu.io/upload_images/267368-ae9ccc4a04b01214.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

# 常見錯誤

## 加密密鑰生成

![image.png](http://upload-images.jianshu.io/upload_images/267368-e1148894430abd05.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

解決:

![image.png](http://upload-images.jianshu.io/upload_images/267368-faee121bf0a0656f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

## 404錯誤

如果沒有在路由文件里面定義路由規(guī)則,直接請求肠缨,會提示如下的信息:

![image.png](http://upload-images.jianshu.io/upload_images/267368-23cdf51a32d0af34.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逆趋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晒奕,更是在濱河造成了極大的恐慌闻书,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脑慧,死亡現(xiàn)場離奇詭異魄眉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)闷袒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門坑律,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人囊骤,你說我怎么就攤上這事晃择〖街担” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵宫屠,是天一觀的道長列疗。 經(jīng)常有香客問我,道長浪蹂,這世上最難降的妖魔是什么抵栈? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮坤次,結(jié)果婚禮上古劲,老公的妹妹穿的比我還像新娘。我一直安慰自己缰猴,他們只是感情好产艾,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洛波,像睡著了一般胰舆。 火紅的嫁衣襯著肌膚如雪骚露。 梳的紋絲不亂的頭發(fā)上蹬挤,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音棘幸,去河邊找鬼焰扳。 笑死,一個胖子當(dāng)著我的面吹牛误续,可吹牛的內(nèi)容都是我干的吨悍。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蹋嵌,長吁一口氣:“原來是場噩夢啊……” “哼育瓜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起栽烂,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤躏仇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腺办,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焰手,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年怀喉,在試婚紗的時候發(fā)現(xiàn)自己被綠了书妻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡躬拢,死狀恐怖躲履,靈堂內(nèi)的尸體忽然破棺而出见间,到底是詐尸還是另有隱情,我是刑警寧澤崇呵,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布缤剧,位于F島的核電站,受9級特大地震影響域慷,放射性物質(zhì)發(fā)生泄漏荒辕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一犹褒、第九天 我趴在偏房一處隱蔽的房頂上張望抵窒。 院中可真熱鬧,春花似錦叠骑、人聲如沸李皇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掉房。三九已至,卻和暖如春慰丛,著一層夾襖步出監(jiān)牢的瞬間卓囚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工诅病, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留哪亿,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓贤笆,卻偏偏與公主長得像蝇棉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芥永,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容