本文實例講述了Laravel框架路由與MVC。分享給大家供大家參考,具體如下:
1、路由
路由的作用就是將用戶的不同url請求轉(zhuǎn)發(fā)給相應(yīng)的程序進行處理,laravel的路由定義在routes文件夾中,默認提供了四個路由文件,其中web.php文件定義基本頁面請求。
1.1、基本路由
最基本的路由請求是get與post請求,laravel通過Route對象來定義不同的請求方式。例如定義一個url為'req'的get請求,返回字符串‘get response':
Route::get('req',function (){
return 'get response';
});
當(dāng)我以get的方式請求http://localhost/Laravel/laravel52/public/req時,返回如下:
![](http://img.jbzj.com/file_images/article/202001/2020113112027440.png?202001311216)
同理,當(dāng)定義post請求時,使用Route::post(url,function(){});
1.2、多請求路由
如果希望對多種請求方式采用相同的處理,可以使用match或any:
使用match來匹配對應(yīng)的請求方式,例如當(dāng)以get或post請求req2時,都返回match response:
Route::match(['get','post'],'req2',function (){
return 'match response';
});
any會匹配任意請求方式,例如以任意方式請求req3,返回any response:
Route::any('req3',function (){
return 'any response';
});
1.3、請求參數(shù)
必選參數(shù):當(dāng)以帶參數(shù)的形式發(fā)送請求時,可以在路由中進行接收,用大括號將參數(shù)括起,用/分割,例如:
Route::get('req4/{name}/{age}', function ($name, $age) {
return "I'm {$name},{$age} years old.";
});
以get請求時將參數(shù)傳遞,結(jié)果如下:
![](http://img.jbzj.com/file_images/article/202001/2020113112543965.png?2020013112619)
可選參數(shù):以上的參數(shù)是必須的,如果缺少某一個參數(shù)就會報錯,如果希望某個參數(shù)是可選的,可以為它加一個?,并設(shè)置默認值,默認參數(shù)必須為最后一個參數(shù),否則放中間沒法識別:
Route::get('req4/{name}/{age?}', function ($name, $age=0) {
return "I'm {$name},{$age} years old.";
});
正則校驗:可以通過where對請求中的參數(shù)進行校驗
Route::get('req4/{name}/{age?}', function ($name, $age=0) {
return "I'm {$name},{$age} years old.";
})->where(['name'=>'[A-Za-z]+','age'=>'[0-9]+']);
1.4、路由群組
有時我們的路由可能有多個層級,例如定義一級路由home,其下有二級路由article,comment等,這就需要將article與comment放到home這個群組中。通過數(shù)組鍵prefix為路由article添加前綴home:
Route::group(['prefix' => 'home'], function () {
Route::get('article', function () {
return 'home/article';
});
});
這樣通過home/article就可以訪問到該路由了。
1.5、路由命名
有時需要給路由起個名字,需要在定義路由時使用as數(shù)組鍵來指定路由名稱。例如將路由home/comment命名為comment,在生成url與重定向時就可以使用路由的名字comment:
Route::get('home/comment',['as'=>'comment',function(){
return route('comment'); //通過route函數(shù)生成comment對應(yīng)的url
}]);
輸出為http://localhost/Laravel/laravel52/public/home/comment
2、控制器
route路由只對請求進行分配跳轉(zhuǎn),具體的業(yè)務(wù)邏輯則需要由控制器來處理,控制器一般封裝成為一個php類??刂破鞯奈募话惴旁赼pp/Http/Controlers文件夾下。例如新建一個LoginController類繼承自Controller,定義checkLog方法回應(yīng)登錄請求,
namespace App\Http\Controllers;
class LoginController extends Controller
{
public function checkLog($name){
return $name.'登錄成功';
}
}
在route.php中將login請求分配到checkLog方法:
Route::get('login/{name}','LoginController@checkLog');
![](http://img.jbzj.com/file_images/article/202001/2020113112739513.png?2020013112810)
同樣的,可以為控制器路由起個名字,比如將其命名為login:
Route::get('login/{name}',['uses'=>'LoginController@checkLog','as'=>'login']);
3、視圖
controller負責(zé)處理應(yīng)用的邏輯,應(yīng)用的顯示則由視圖View負責(zé),這體現(xiàn)了MVC中不同的邏輯之間的分離。視圖一般位于/resource/views目錄下,一般一個controller文件對應(yīng)一個視圖文件夾,因此我創(chuàng)建的視圖為:views/Login/login.blade.php。blade文件是laravel的一個模板引擎,它編譯為PHP儲存起來。它包含HTML語言,可以在其中直接使用PHP,例如login.blade.php:
!DOCTYPE Html>
html>
head>
title>登錄界面/title>
/head>
body>
{{$name}}登錄成功
/body>
/html>
在controller的checkLog方法中調(diào)用視圖并傳入?yún)?shù):
public function checkLog($name){
return View('Login/login',[
"name"=>$name
]);
}
4、模板
在mvc中通過Models與數(shù)據(jù)庫中的表進行交互,每個數(shù)據(jù)庫對應(yīng)一個Model模板。laravel并沒有定義models目錄,一般可以在app目錄下新建一個models文件夾存放模板文件。例如定義一個Student模板并指定表名與主鍵:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
protected $table='student';
protected $primaryKey='id';
}
在controller中通過Student模板查詢所有:
namespace App\Http\Controllers;
use App\Models\Student;
class Login
{
public static function showDB(){
$table=Student::all();
dd($table);
}
}
更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Laravel框架的PHP程序設(shè)計有所幫助。
您可能感興趣的文章:- Laravel框架路由配置總結(jié)、設(shè)置技巧大全
- Laravel中獲取路由參數(shù)Route Parameters的五種方法示例
- Laravel最佳分割路由文件(routes.php)的方式
- 修改Laravel5.3中的路由文件與路徑
- Laravel 4 初級教程之視圖、命名空間、路由
- Laravel 5框架學(xué)習(xí)之路由、控制器和視圖簡介
- Laravel框架模板加載,分配變量及簡單路由功能示例
- Laravel框架路由和控制器的綁定操作方法
- Laravel框架控制器,視圖及模型操作圖文詳解
- laravel通過a標(biāo)簽從視圖向控制器實現(xiàn)傳值
- laravel框架模型、視圖與控制器簡單操作示例
- Laravel 5框架學(xué)習(xí)之模型、控制器、視圖基礎(chǔ)流程