才開始接觸laravel,慕課網輕鬆學會Laravel筆記。
Laravel中的路由和控制器
1. 路由
- 路由簡介
- 使用者的請求準發給相應的程式進行處理
- 建立url和程式之間的對映
- 請求型別get、post、put、patch、delete
- 基本路由
- 多請求路由
- 路由引數
- 路由別名
- 路由群組
- 路由輸出檢視
//get
Route::get('basic1',function () {
return 'hello';
});
Route::post('basic2',function (){
return 'world';
});
//多請求方式
Route::match(['get','post'],'multy1',function() {
return 'multy1';
});
//any
Route::any('multy2',function (){
return 'multy2';
});
//路由引數
Route::get('user/{id}',function($id){
return 'user-id-'.$id;
});
//可選引數
Route::get('user/{name?}',function($name = null){
return 'user-name-'.$name;
});
Route::get('user/{name?}',function($name = 'cate'){
return 'user-name-'.$name;
});
Route::get('user/{name?}',function($name = 'cate'){
return 'user-name-'.$name;
})->where('name','[A-Za-z]+');
Route::get('user/{id}/{name?}',function($id,$name = 'cate'){
return 'user-id-'. $id .'-name-'.$name;
})->where(['id'=>'[0-9]+','name'=>'[A-Za-z]+']);
//路由別名
Route::get('user/member-center',['as'=>'center',function(){
return 'member-center';
}]);
//http://test.com/user/member-center
Route::get('user/member-center',['as'=>'center',function(){
return route('center');
}]);
//路由群組
Route::group(['prefix'=>'member'],function (){
Route::get('user/member-center',['as'=>'center',function(){
return route('center');
}]);
Route::any('multy2',function (){
return 'multy2';
});
});
//http://test.com/multy2 multy2
//http://test.com/member/user/member-center http://test.com/member/user/member-center
//http://test.com/member/multy2 multy2
//路由中輸出檢視
Route::get('view',function (){
return view('welcome');
});
//http://test.com/view
2. 控制器
- 怎麼新建一個控制器
- 控制器和路由怎樣進行關聯
- 關聯控制器後,路由的特性怎麼用
php artisan make:controller UserController
//會新建UserController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function info()
{
return 'user-info';
}
}
Route::get('user/info','UserController@info');
或者這樣寫
Route::get('user/info'['uses'=>'UserController@info'];
使用別名:
Route::get('user/info',[
'uses'=>'UserController@info',
'as'=> 'userinfo'
]);
public function info()
{
// return 'user-info';
return route('userinfo');
}
路由傳遞引數
路由
Route::get('member/{id}','MemberController@index')->where(['id'=>'[0-9]+']);
或者
Route::get('member/{id}','MemberController@index')->where('id','[0-9]+');
方法
public function index($id)
{
return 'member-index'.$id;
}
3. 檢視
-
怎樣新建檢視
info.php
Infi.blade.php
http://test.com/member/12 //member-info php //控制器 return view('member-info'); //檢視(member-info php) member-info.php
blade
return view('info'); //檢視 info.blade.php
-
怎樣輸出檢視
return view('info');
return view('member/info');
return view ('member/info',['name'=>'winne']);
在view下新建member目錄
info.blade.php //resources/views/member/info.blade.php
變數
return view(
'member/info',
[
'name'=>'care',
'age' => 18
]
);
//view {{$name}}
4. 模型
怎麼新建模型
怎麼使用模型
return Member::getInfo();
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
public static function getInfo()
{
return 'hello';
}
}
5. 資料庫操作之 -DB facade
Laravel中提供DB facade(原始查詢)、查詢構造器和Eloquent ORM三種運算元據庫方式
- 新建資料表與連線資料庫
create table if not exists `student`(
`id` int AUTO_INCREMENT primary key,
`name` varchar(255) not null default'' COMMENT '姓名',
`age` tinyint unsigned not null default 0 COMMENT '年齡',
`sex` tinyint unsigned not null default 0 COMMENT '性別',
`created_at` int not null default 0 COMMENT '新增時間',
`updated_at` int not null default 0 COMMENT '修改時間'
) engine=innodb default charset=utf8 auto_increment = 1 comment ='學生表';
- 使用DB facade實現CURD
public function test1()
{
// return 'test1';
//查詢
// $student = DB::select('select * from student');
// var_dump($student);
//插入
// $bool = DB::insert('insert into student(name,age) values (?,?)',['care',18]);
// var_dump($bool);
//更新
// $num = DB::update('update student set age = ? where name = ?',[20,'care']);
// var_dump($num);
//查詢
// $data = DB::select('select * from student');
// var_dump($data);
//刪除
// $num = DB::delete('delete from student where id > ?',[1]);
// var_dump($num);
}
6. 資料庫操作之 -查詢構造器
1. 簡介及新增資料
- 提供方便、流暢的介面,用來建立及執行資料庫查詢語法
- 使用PDO引數繫結,以保護應用程式免於SQL隱碼攻擊因此傳入的引數不需額外轉義特殊字元
- 基本可以滿足所有的資料庫操作,在所有支援的資料庫系統上都可以執行
新增資料
//插入一條資料
$bool = DB::table('student')->insert(
['name'=>'care','age'=>18]
);
//返回插入資料的ID
$id = $bool = DB::table('student')->insertGetId(
['name'=>'care','age'=>18]
);
//插入多條資料
$bool = DB::table('student')->insert([
['name'=>'winne','age'=>18],
['name'=>'tony','age'=>19]
]);
2. 修改資料
- 更新為指定的內容
- 自增和自減
$num = DB::table('student')
->where('id',3)
->update(['age'=>1]);
var_dump($num);
//自增
$num = DB::table('student')->increment('age');
$num = DB::table('student')->increment('age',2);
//自減
$num = DB::table('student')->decrement('age');
$num = DB::table('student')->decrement('age',2);
//條件操作
$num = DB::table('student')->where('id',4)->decrement('age',2);
//自增、自減同時更新
$num = DB::table('student')->where('id',4)->decrement('age',2,['name'=>'imooc']);
3. 刪除資料
$num = DB::table('student')->where('id',7)->delete();
$num = DB::table('student')->where('id','>=',5)->delete();
DB::table('student')->truncate();
4. 查詢資料
- get();
- first();
- where();
- pluck();
- lists();
- select();
- chunk();
//第一條
$data = DB::table('student')->orderBy('id','desc')->first();
//按指定條件獲取
$data = DB::table('student')->where('id','>',1)->get();
//多條件
$data = DB::table('student')->whereRaw('id > ? and age > ?',[1,3])->get();
//取欄位
$data = DB::table('student')->pluck('name','id');
$data = DB::table('student')->pluck('name');
//取欄位
$data = DB::table('student')->select('id','name','age')->get();
//分塊
echo '<pre>';
DB::table('student')->orderBy('id')->chunk(2, function ($student) {
var_dump($student);
if(1){
return false;
}
});
5. 聚合函式
- max()
- min()
- sum()
- count()
- avg()
$num = DB::table('student')->sum('age');
$num = DB::table('student')->max('age');
$num = DB::table('student')->min('age');
$num = DB::table('student')->sum('age');
$num = DB::table('student')->avg('age');
7. 資料庫操作之Eloquent ORM
- Eloquent ORM簡介、模型的建立、查詢資料
- 新增資料、自定義時間戳、批量賦值
- 修改資料
- 刪除資料
1. Eloquent ORM簡介、模型的建立、查詢資料
模型的建立
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
protected $table = 'student';
protected $primaryKey = 'id';
}
Eloquent ORM中查詢
- all()、find()、findOrFail()
- 查詢構造器在ORM中的使用
$student = Student::all();
$student = Student::get();
$student = Student::find(1);
$student = Student::findOrFail(1);
$student = Student::sum('age');
$student = Student::max('age');
$student = Student::min('age');
$student = Student::avg('age');
$student = Student::sum('age');
$student = Student::where('id','>=',3)->orderBy('id','desc')->first();
2. 新增資料、自定義時間戳、批量賦值
//使用模型新增資料
$student = new Student();
$student->name ='pony';
$student->age = 45;
$bool = $student->save();
var_dump($bool);
$student = Student::find(8);
echo $student->created_at;
echo date('Y-m-d H:i:s',$student->cteated_at);
//使用模型的create方法新增
$student = Student::create(
['name'=>'san','age'=>18]
);
dd($student);
//firstOrCreate 查詢不到就建立
$student = Student::firstOrCreate(
['name'=>'sans']
);
dd($student);
//firstOrNew 查詢不到就返回,建立需save
$student = Student::firstOrNew(
['name'=>'sanss']
);
$bool = $student->save();
dd($bool);
模型中時間的處理、批量賦值的處理
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
protected $table = 'student';
protected $primaryKey = 'id';
//指定允許批量賦值的欄位
protected $fillable = ['age','name'];
//指定不允許批量賦值的欄位
protected $guarded = [];
public $timestamps = true;
public function getDateFormat()
{
return time();
}
protected function asDateTime($value) {
return $value;
}
}
3. ORM修改資料
- 通過模型更新
- 結合查詢語句批量更新
//通過模型更新
$student = Student::find(8);
$student->name = 'two';
$bool = $student->save();
var_dump($bool);
//orm更新
$num = Student::where('id','>',9)->update(
['age'=>12]
);
var_dump($num);
需要關閉模型中時間轉換 asDateTime
4. ORM刪除資料
- 根據模型刪除
- 根據主鍵值刪除
- 根據指定條件刪除
//根據模型刪除
$student = Student::find(12);
$bool = $student->delete();
var_dump($bool);
//根據主鍵id刪除
$num = Student::destroy(11);
$num = Student::destroy(9,10);
$num = Student::destroy([6,8]);
dd($num);
//根據指定條件刪除
$num = Student::where('id','>=',3)->delete();
dd($num);
8. Blade模板使用
- Blade模板引擎簡介及模板繼承的使用
- 基礎語法及include的使用
- 流程控制
- 模板中的URL
Blade模板引擎簡介
Blade並不限制你在檢視(view)中使用原生PHP程式碼
所有Blade檢視頁面都將被編譯成原生PHP程式碼並快取起來,除非你的模板檔案被修改了,否則不會重新編譯。
模板繼承
- section
- yield
- extands
- parent
@extends('layouts')
@section('header')
@parent
header
@stop
@section('sidebar')
sidebar
@stop
@section('content')
content
@stop
基礎語法及include的使用
- 模板中輸出變數
- 模板中呼叫PHP程式碼
- 原樣輸出
- 模板中的註釋
- 引入子檢視include的使用
@extends('layouts')
@section('header')
@parent
header
@stop
@section('sidebar')
sidebar
@stop
@section('content')
content
<!-- 1. 模板中輸出變數-->
<p>{{$name}}</p>
<!-- 2. 模板中呼叫PHP程式碼-->
<p>{{time()}}</p>
<p>{{date('Y-m-d H:i:s',time())}}</p>
<p>{{in_array($name,$array) ? 'true' : 'false'}}</p>
<p>{{var_dump($array)}}</p>
<p>{{isset($name) ? $name :'default'}}</p>
<p>{{$name or 'default'}}</p>
<!-- 3. 原樣輸出-->
<p>@{{$name}}</p>
{{-- 4. 模板中的註釋(瀏覽器看不到)--}}
{{-- 5. 引入子檢視 include--}}
@include('student.common1',[
'message'=>'我是錯誤資訊'
])
@stop
被引入 resources/views/student/common1.blade.php
<p>我是include{{$message}}</p>
模板中的流程控制
- if
- unless (if取反 )
- for
- foreach
- forelse
@extends('layouts')
@section('header')
@parent
header
@stop
@section('sidebar')
sidebar
@stop
@section('content')
content
<br>
@if($name == 'care')
I`m care
@elseif($name == 'imooc')
I`m imooc
@else
who am i?
@endif
<br>
@if(in_array($name,$array))
true
@else
false
@endif
<br>
@unless($name != 'care')
i`m care
@endunless()
<br>
{{--@for($i = 0 ;$i<10;$i++)--}}
{{--<p>{{$i}}</p>--}}
{{--@endfor--}}
<br>
@foreach($students as $student)
<p>{{$student->name}}</p>
@endforeach
<br>
@forelse($students as $student)
<p>{{$student->name}}</p>
@empty
<p>null</p>
@endforelse
@stop
模板中的URL
- url
- action()
- route
<a href="{{url('url')}}">url()</a>
<br>
<a href="{{action('StudentController@urlTest')}}">action()</a>
<br>
<a href="{{route('url')}}">route()</a>
public function urlTest()
{
return 'urlTest';
}
Route::get('url',['as'=>'url','uses'=>'StudentController@urlTest']);