2018-08-24 16:27:14  576048 13

laravel5.6框架入门基础(一)

 标签:   

官网


https://laravel.com/

The PHP Framework For Web Artisans

Laravel为WEB艺术家而生


laravel 版本

1.jpg

LTS是长期支持(Long Term Support)的缩写

laravel框架安装


第一种 homestead 虚拟机

第二种  composer安装   (推荐)


环境要求


PHP >= 7.1.3

OpenSSL PHP Extension

PDO PHP Extension

Mbstring PHP Extension

Tokenizer PHP Extension

XML PHP Extension

Ctype PHP Extension

JSON PHP Extension


安装composer   修改为中国镜像


第一种  laravel安装器


composer global require "laravel/installer"


进入到项目目录执行


laravel  new  项目名


第二种  直接创建项目


composer create-project --prefer-dist laravel/laravel  项目名


配置nginx访问


1 首先配置根目录到   项目目录的 public下面

2  其次添加下面代码


location / {
    try_files $uri $uri/ /index.php?$query_string;
}


laravel框架目录介绍

app                //应用目录 代码基本都在这里写
bootstrap          //框架启动文件 路由缓存目录
config             //框架的配置目录
database           //数据库目录 数据迁移以及种子
public             //框架入口文件 以及静态文件
resources          //资源目录 视图文件未编译的jscss
routes             //路由目录
storage            //存储目录  编译模板 日志等。。
tests              //测试文件
vendor             //composer依赖包 
.env               //环境配置文件
artisan            //命令行使用文件


路由  route


Route::请求方式  ($uri,回调函数/控制器@方法)


请求方式: get  post  put delete patch options

$uri      www.lampol.com/index/login


回调函数  直接返回给浏览器


控制器@方法  进入控制器方法进一步处理

注意 post  put delete patch  需要 进行表单csrf验证 暂时排除验证


app/Http/Middleware/VerifyCsrfToken.php
protected $except = [       
         'your/route'    
];


匹配多种请求方式


Route::match([‘get’,’post’],$uri,function(){

});


匹配所有请求


Route::any($uri,function(){

});


重定向路由


Route::redirect('index','login’);


视图路由


Route::view($uri,视图);


路由参数


Route::get('user/{nane}/{age}',function($name,$age){

    return $name.'=='.$age;
    
});


可选参数


Route::get('user/{nane?}',function($name='123'){

 return $name;
 
});


过滤参数正则


Route::get('user/{ids?}',function($ids){
    return $ids;
})->where(‘ids’,‘[a-z]+’);  //多个参数过滤 后面加数组


路由组前缀


Route::prefix('admin')->group(function(){Route::get('user',function(){
return 'admin user’;
        });
Route::get('order',function(){
return 'admin preder’;
});
});


命名空间


Route::namespace('Admin')->group(function(){Route::get('us','TestController@test’);
});


控制器

中间件

资源


控制器


遵循规则


1 统一放在  app/Http/Controllers


2 命名空间  namespace App\Http\Controllers;


3 遵循PSR-4 类定义规范  文件名和类名一样 首字母大写


4 类名Controller.php  默认规则  


5 可以继承  Controller.php  也可以不继承  推荐继承


可以 app/Http/Controllers  继续创建目录  目录名首字母大写


命名空间 namespace App\Http\Controllers\目录名


控制器的路由定义


在定义控制器路由时,我们不需要指定完整的控制器命名空间。默认的在App\Http\Controllers


例如  App\Http\Controllers\UserController   方法名 定义访问 index 方法
Route::get(‘index’,’UserController@index’); 即可访问到 index方法
如果 下面还有目录 
例如  App\Http\Controllers\User\UserController   方法名 定义访问 index 方法
Route::get(‘index’,’User\UserController@index’); 即可访问到 index方法


单行为控制器


处理单个行为的控制器,你可以在控制器中放置一个 __invoke 方法:

Route::get(‘user‘,’控制器’);  默认会进入到 __invoke


资源控制器以及资源路由


Laravel 资源路由将典型的「CRUD」(增删改查)路由分配给具有单行代码的控制器。

创建多个路由来处理资源上的各种行为。生成的控制器为每个行为保留了方法


资源路由的创建


Route::resource('/article','ArticleController');


资源控制器部分资源路由


//允许访问的方法
Route::resource('/article','ArticleController',['only'=>['index','store','show']]);
//不可访问的方法
Route::resource('/article','ArticleController',['except'=>['index','store']]);


Blade模板引擎


       Blade 是 Laravel 提供的一个简单而又强大的模板引擎。和其他流行的 PHP 模板引擎不同,Blade 并不限制你在视图中使用原生 PHP 代码。所有 Blade 视图文件都将被编译成原生的 PHP 代码并缓存起来,除非它被修改,否则不会重新编译,这就意味着 Blade 基本上不会给你的应用增加任何负担。


定义规则:


存放在 resources/views 目录。

Blade 视图文件使用 .blade.php 作为文件扩展名


模板引擎展示


index.blade.php
return  view(‘index’)   // 助手函数   
user/index.blade.php
return view(‘user.index’)


传数据到视图


return view(‘index’,[‘name’=>’liudehua’])
return view('index‘)->with('age',33);

视图 数据输出


{{ 变量名 }}


CSRF 保护


       Laravel 可以轻松地保护应用程序免受 跨站点请求伪造 (CSRF) 攻击,跨站点请求伪造是一种恶意攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令。


Laravel 会自动为每个活跃用户的会话生成一个 CSRF「令牌」。该令牌用于验证经过身份验证的用户是否是向应用程序发出请求的用户。


无论何时,当您在应用程序中定义HTML表单时,都应该在表单中包含一个隐藏的CSRF标记字段,以便CSRF保护中间件可以验证该请求, 您可以使用 @csrf Blade指令来生成令牌字段:


form  表单 添加 @csrf  或者  {{ csrf_field() }}
<input type="hidden" name="_token" value={{csrf_token()}}>
<form method="POST" action="/profile">
    @csrf  
</form>


csrf白名单


排除csrf的验证


URI 添加到 VerifyCsrfToken 中间件中的 $except 属性来排除对这类路由的 CSRF 保护:


protected $except = [
        ‘user‘,
        ‘user/*’
];


表单请求方法


@method(方法名)

{{ method_field(方法名)}}  

<input type="hidden" name="_method" value="patch"> 


Request请求


       通过依赖注入的方式来获取当前HTTP 请求的实例,你应该在控制器方法中类型提示 Illuminate\Http\Request。传入的请求的实例将通过 服务容器 自动注入


Request 类文档


https://laravel.com/api/5.6/Illuminate/Http/Request.html


引入Request


use Illuminate\Http\Request;


注入到方法里


public function index(Request $request){}


Request  常用方法


ip()  获取访问者ip 地址  //  dd() 打印数据 并退出 

userAgent()  获取访问者代理

route()   获取路由请求的详情

header()  获取请求头信息

url()  获取请求地址 不包括查询字符串

fullUrl()  获取请求地址 包括查询字符串

path()  获取请求路径

method()  获取请求的方法

isMethod(方法名)  判断请求方法


请求数据获取


路由带参数获取


Route::get('/test/{id}','UserController@test’);
public function test(Request $request){}


get(name,默认值) 获取get方式请求数据

query(name,默认值)  查询字符串   不加任何参数 获取所有的

post(name,默认值) 获取post发送的数据


input(name,默认值) 获取get/post发送的数据  //不带参数 获取所有

all() 获取所有发送的数据

only(数组) 获取指定的name

except(数组) 不获取指定的name


merge(数组)  合并新的数据到请求数据中

replace(数组) 替换请求数据

keys()  获取所有的name

has(name) 判断是否传过来值

file()  获取文件的信息


session() 获取session值

cookie() 获取某cookie值


响应 Response

字符串数组


return  字符串/数组    数组 会给转为json 


响应对象


Illuminate\Http\Response


返回完整的 Response 实例允许你自定义响应的 HTTP 状态码和响应头信息


return   response($data,$code);  //助手函数


可以操作header


return response($data, 301)->header('Content-Type', 'application/json');


响应cookie


cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
return response($data, 301)->cookie($key,$value,$minutes);


视图响应  控制响应的状态 以及header


return response()->view('index', ['name'=>'liudehua'], 300)->header('Content-Type', 'text/html’);


json响应 


return response()->json($data);


jsonp响应


return response()->json($data)->withCallback($request->input('callback'));


文件下载


return response()->download($pathToFile, $name);


文件响应


return response()->file($pathToFile);


重定向  redirect


重定向响应是 Illuminate\Http\RedirectResponse 类的实例  助手函数redirect()

return   redirect(路由);


重定向到外部域名


return redirect()->away('http://www.baidu.com’);


重定向并使用闪存的 Session 数据


return redirect('test')->with('name','liudehua’);

模板访问  用 session(‘name’)


重定向到之前位置


return back()->with('name','liudehua');


Cookie


引入 Cookie 

use Illuminate\Support\Facades\Cookie;


写入 cookie


$cookie = Cookie::make($key,$value,$minutest); //创建一个cookie实例

//加入到队列

Cookie::queue($cookie );


获取 cookie


Cookie::get($key)


删除cookie


$user = Cookie::forget('username');

Cookie::queue($user);


判断cookie 是否存在


dd(Cookie::has('username'));


      默认情况下,Laravel 生成的所有 Cookie 都是经过加密和签名,因此不能被客户端修改或读取。 如果你想要应用程序生成的部分 Cookie 不被加密,那么可以使用在 app/Http/Middleware 目录中 App\Http\Middleware\EncryptCookies 中间件的 $except 属性:


protected $except = [

    'cookie_name',

];


Session

session配置


Session 的配置文件存储在 config/session.php

'driver' => env('SESSION_DRIVER', 'file’),

"file", "cookie", "database", "apc",  "memcached", "redis", "array“


引入 


use Illuminate\Support\Facades\Session;


session  的存储

Session::put(‘name’,‘liudehua’);  //里面也可以用数组形式


获取

Session::get(‘name’)


删除

Session::forget('name’);


清空所有session

Session::flush();


判断是否存在session

Session::has('key1’)


助手函数 存储


session([‘ag’=>33]); //必须传数组形式


获取

session('ag’)


Request  操作 session


//存

$request->session()->put('key', 'value’);


//获取

$request->session()->get('key', 'default’);

//判断

$request->session()->has('users’)

//删除

$request->session()->forget('key');

$request->session()->flush();


Balde模板

模板变量输出  


{{变量名}}


注意:Blade {{}} 声明中的内容是自动通过 PHP 的 htmlentities 方法过滤的,用来防止 XSS 攻击。


不对变量进行过滤  


{!! 变量名 !!}

模板内部可以直接使用php函数处理

由于许多 JavaScript 框架也是用花括号来表示要显示在浏览器的表达式, 可以使用 @ 符告诉 Blade 渲染引擎保持这个表达式不变


原样输出


@{{ name }}   


注释


{{-- 此注释将不会出现在渲染后的 HTML --}}


流程控制  


if语句


@if、@elseif、@else 和 @endif 指令构建


@if($score>60)
<p style="color:green">{{$score}} 不错啊 及格了呀 </p>
@elseif($score==60)
<p style="color:green">{{$score}} 真悬</p>
@else
<p style="color:red">{{$score}} 不及格 </p>
@endif

@isset   @endisset


@isset($info)
<p> {{$info}} </p>
@endisset
<p>{{ $name or ‘default’ }}</p>  //短语法


@switch


可以使用 @switch、@case、@break、@default 和 @endswitch 指令来构建 Switch 语句



@switch($age)
@case (20)
  <p style="color:green">{{$age}} 不错啊 20了 </p>
  @break
@case (30)
  <p style="color:red">{{$age}} 不错啊 30了 </p>
  @break
@default
  <p style="color:yellow">{{$age}} 不错啊 多大了 </p>
@endswitch


循环

for 


@for($i=0;$i<9;$i++)
<p> {{$i}}</p>
@endfor
@continue($i==5)
@break($i==7)


foreach 

@foreach ($data as $v)
    <p>此用户为 {{ $v }}</p>
@endforeach


纯PHP代码


@php
    var_dump($data);
@endphp


模板继承和布局


@section('left')

    这是左边侧边栏。

@show


@extends


@yield('content')


@section 命令定义了视图的一部分内容,而 @yield 指令是用来显示指定部分的内容。


master.blade.php

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" >
<title> @yield('title') </title>
<head>
<body>
@section('left')
    这是左边侧边栏。
@show
@section('right')
    这是右边的侧边栏。
@show
<div>
  @yield('content')
</div>
</body>
</html>


index.blade.php


@extends('layout.master')
@section('title','这是个首页')
@section('left’)
@parent  
  我是左边的
@endsection   
@section('right')
  我是右边的
@endsection   
@section('content')
<p>第一篇文章</p>
<p>第二篇文章</p>
@endsection


引入 子视图


@include('layout.header’)


视图数据共享


app/Providers/AppServiceProvider.php      boot方法
use Illuminate\Support\Facades\View;
View::share('username','liudehua');

引入js    css资源


直接放到  public   文件加下面


引入 的话 就是从 public下面开始


<script src="/js/jQuery.min.js">  </script>

13 条留言此文章没有人评论

给我留言

评论内容