php---laravel5框架的使用
路由器的使用:
//在浏览器直接访问,跳转到welcome视图,视图路径在public/resources/views/
Route::get('/', function () {
return view('welcome');
});
//在浏览器直接访问,返回hello world
Route::get("route1", function () {
return "hello world";
});
//因为是post请求,不可以在浏览器地址栏直接访问
Route::post("route2", function () {
return "hello world";
});
//match: 可以定义接收get或post请求
Route::match(['get','post'], "reute3", function () {
return "hello world";
});
//any: 可以接收get和post请求
Route::any("route4", function () {
return "hello world";
});
//路由接收参数,php中的字符串拼接用 "."
Route::get("user1/{id}", function($id){
return "id-->" . $id;
});
//在user2/{id?} 后面加个问号代表参数不是必要的,可以在function中给个默认值
Route::get("user2/{id?}", function($id = 5){
return "id-->" . $id;
});
//参数校验,在最后面加上正折表达,这里代表username只能是字母
Route::get("user3/{username}", function($username) {
return "username-->" . $username;
})->where("username","[A-Za-z]+");
//路由别名,只要在后面加个数组,注意数组第一个元素是"as" => "center" ,第二个元素是function
Route::get("user4/mamber-center", ["as" => "center" , function(){
//使用routes可以返回对应的路径
return route("center");
}]);
//路由群组,加前缀,member.可以通过member/user1访问到第一个,
//通过member/user2访问到第二个
Route::group(["prefix" => "member"], function(){
Route::get("user1",function(){
return "hello world";
});
Route::get("user2",["as" => "group_route", function(){
return route("group_route");
}]);
});
路由器绑定控制器的方法:
//路由和控制器进行绑定,第一个是访问地址,第二个是控制器名称和方法名称,用@符号隔开
Route::get("member", "MemberController@info");
//路由和控制器进行绑定,第二种方法
Route::get("member1", ["uses" => "MemberController@info"]);
//起别名的方法
Route::get("member2", ["uses" => "MemberController@info", "as" => "memter"]);
//控制器接收参数的方法
Route::get("member3/{id}","MemberController@info")->where("id", "[0-9]+");
创建控制器:
<?php
namespace App\Http\Controllers;
//在app/http/controllers/下新建一个文件,类名和文件名相同,然后要extends controller
class MemberController extends Controller{
public function info($id){
return "id->" . $id;
}
}
创建视图,一般一个控制器对应一个视图文件夹:
.blade.php是默认模板视图文件
在控制器中返回视图代码:
class MemberController extends Controller{
public function info(){
//返回/member/info.blade.php
return view("/member/info");
}
}
在视图里面获取控制器传过来的参数:
视图文件:使用{{$name}} 双大括号加参数名
{{$name}} === {{$age}}
控制器文件:在返回视图后加一个数组,里面存放参数
public function info(){
//返回/member/info.blade.php
return view("/member/info",
["name" => "php", "age" => 123]);
}
Model视图的创建:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
//创建一个视图类,extends Model
class Member extends Model{
//为了方法调用,写成静态方法
public static function info(){
return "this is model";
}
}
控制器调用视图:
public function info(){
return Member::info();
}
连接数据库:
config/database.php --》mysql的配置
.env --》根目录下的配置文件,里面存放连接要用的数据
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=shopping
DB_USERNAME=root
DB_PASSWORD=
根据要连接的数据库配置一下就可以了
在Conrtoller中连接数据库写sql语句
用DB::select,DB::update,DB::insert,DB::delete,
public function getUserInfo($username){
$user = DB::select("select id,username from user where username=?",
[$username]); //中括号放参数,增删改查写法类似
return dd($user);
}
查询构造器的使用(更快更方便):
插入:
//查询构造器的使用,在user表中插入数据,可以用二维数组插入多条数据
public function query(){
$rowCount = DB::table("user")->insert(
[
["username" => "larvel2", "password" => "admin"],
["username" => "larvel3", "password" => "admin"]
]);
if($rowCount > 0){
return "success";
}
return fail;
}
修改:
//查询构造器的使用,在user表中修改数据,注意要加上where条件
public function query2(){
$rowCount = DB::table("user")
->where("username","root")
->update(["password" => "456"]);
var_dump($rowCount);
if($rowCount > 0){
return "success";
}
return "fail";
}
删除:
//使用查询构造器删除数据
public function query3(){
$rowCount = DB::table("user")
->where("id", ">=" ,13)
->delete();
var_dump($rowCount);
if($rowCount > 0){
return "success";
}
return "fail";
}
查询:
//使用查询构造器查询数据
public function query4(){
//查询所有数据
$userList = DB::table("user")->get();
//查询第一条数据,可以指定排序方法->order("id","desc")
$user1 = DB::table("user")->first();
//查询指定条件的数据
$user2 = DB::table("user")->where("id", ">=" ,14)->get();
//查询指定条件的数据,多条件版
$user3 = DB::table("user")->whereRaw("id >= ?", [12])->get();
//查询指定的字段
$usernameList = DB::table("user")->pluck("username");
//查询之后用键值对的方式显示
$usernameAndId = DB::table("user")->lists("username","id");
//查询指定的字段
$selectUser = DB::table("user")->select("username","password")->get();
//一次查询n条,可以用return停止查询
echo "<pre>";
$selectN = DB::table("user")->chunk(2,function($user){
var_dump($user);
});
}
使用mysql的函数:
//聚合函数的使用
public function query5(){
$count = DB::table("user")->count();
var_dump($count);
$max = DB::table("user")->max("id");
var_dump($max);
}
ORM框架:
查找:
public function orm1(){
echo "<pre>";
//User定义的一个pojo,他有all(),find(),findOrFail()等方法
$users = User::all();
$user1 = User::findOrFail(15);//查找指定id,如果查不到就报错
$user2 = User::where("id",">",1)->orderBy("id","desc")->first();
$count = User::count(); //聚合函数的使用
$max = User::max("id");
dd($max);
}
插入:
public function orm2(){
$user = new User(); //新建一个用户
$user->username = "orm"; //设置用户属性
$user->password = "admin";
//直接用save()方法保护到数据库,
//orms框架会自动处理creaet_at和update_at
//如果数据库表没有这两个字段,会报错
$bool = $user->save();
//用create方法直接保护到数据库
$user1 = User::create(["username" => "imooc", "password" => "admin"]);
//在数据库查找,如果找不到就插入一条新的
$user2 = User::firstOrCreate(["username" => "cai", "password" => "admin"]);
//在数据库查找,如果找不到就new一个对象,不会插入数据库
$user3 = User::firstOrNew(["username" => "caijun", "password" => "admin"]);
$user3->save();
dd($user3);
}
修改:
//orm,修改
public function orm3(){
//把id大于40的密码修改为123456
$rowCount = User::where("id", ">", 40)->update(["password" => "123456"]);
var_dump($rowCount);
}
删除:
//orm,删除
public function orm4(){
//通过模型删除
$user1 = User::find(41);
$user1->delete();
//通过主键删除
User::destroy(42);
User::destroy([43,44]);
//指定条件删除
User::where("id", ">", "15")->delete();
}
Blade模板的使用:
在resources中创建一个模板文件:layous.blade.php
<html>
<title></title>
<style type="text/css">
div{
margin: 5px;
border-style: solid;
border-color: black;
float: left;
}
.header{
width: 100%;
height: 200px;
}
.sidebar{
width: 200px;
height: 500px;
}
.content{
width: 600px;
height: 500px;
}
</style>
<body>
<div class = "header">
@section("header")
header
@show
</div>
<div class = "sidebar">
@yield("sidebar")
sidebar
@show
</div>
<div class = "content">
@section("content")
content
@show
</div>
</body>
</html>
创建一个section.blade.php文件,引用模板
@extends("layous")
@section("header")
@parent
section 1 => header
@stop
@section("sidebar")
@parent
section 1 => sidebar
@stop
@section("content")
@parent
section 1 => content
@stop
模板文件的使用:
@section("content")
<!-- 1.输出变量 -->
<p>{{$username}}</p>
<!-- 2.调用函数 -->
<p>{{ time() }}</p>
<p>{{ date("Y-m-d H:i:m"),time() }}</p>
<!-- 3.是否在数组中 -->
<p>{{ in_array($username,$arr) ? "true" : "false"}}</p>
<p>{{var_dump($arr)}}</p>
<!-- 4.原样输出 -->
<p>@{{$username}}</p>
{{-- 址注释在浏览器中看不到 --}}
<!-- 5.使用子视图 ,可以传参数到子视图中 -->
<p>@include("user/childView",["message" => "success"])</p>
@stop
模板中流程控制:
@section("sidebar")
@if($username == "immoc")
<p>i am immoc</p>
@else
<p>i am not immoc</p>
@endif
@for($i = 0; $i < 9; $i ++)
<p>{{$i}}</p>
@endfor
@foreach($users as $user)
<p>{{$user->username}}</p>
@endforeach
@forelse($users as $user)
<p>{{$user->usrname}}</p>
@empty
<p>null</p>
@endforelse
@stop
模板中的URL:url()和route()比较常用
@section("header")
@parent
section 1 => header
<a href="{{url('urlTest')}}">url()</a>
<a href="{{action('UserController@urlTest')}}">action()</a>;
<a href="{{route('url')}}">route()</a>
@stop