16 06 2020

PHP框架 - Laravel 5.6

一、composer安装

1.1 composer介绍

composer是php用来管理依赖关系的工具,你可以在自己的项目中申明所依赖的外部关系库,composer会帮你安装这些依赖的库文件;一句话,composer是一个工具,是为php项目准备的软件管家。

1.2 composer工作原理

image.png

1.3 composer安装

windows安装:

命令行安装:

自行去操作...


注意:如果是安装composer.exe文件,一定要安装在使用的版本的php的安装目录,也就是php.exe所在目录

1.4 镜像地址设置:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/   或者  composer config -g repo.packagist composer https://packagist.phpcomposer.com


镜像原理:

image.png


1.5 配置文件修改

①开启php.ini扩展配置:

extension=php_openssl.dll    

extension=php_pdo_mysql.dll  (PDO)

extension=php_mbstring.dll  (mbstring)

extension=php_fileinfo.dll  (验证码)

extension=php_curl.dll       (请求发送)

②开启http.conf配置

LoadModule deflate_module modules/mod_deflate.so

LoadModule rewrite_module modules/mod_rewrite.so

1.6 使用composer更新composer 

composer self-update


二、Laravel安装

2.1 安装具体版本命令:composer create-project laravel/laravel=5.6.* my_laravel --prefer-dist

laravel/laravel=5.6.*   这个* 代表这里安装5.6的最高版本

image.png

image.png

2.2 查看框架版本信息:php  artisan --version

2.3 启动服务:php  artisan serve

2.4 laravel框架目录结构

① 目录文件 省略...

② artisan脚手架文件

注意:使用artisan文件需要注意2点

① php必须添加环境变量,必须保证版本

② artisan必须存在命令行当前的工作路径下,也就是框架的根目录下

2.5 laravel启动方式

①  方式1, 命令启动:php artisan serve  该启动方式不需要启动apache/nginx ,不推荐使用,能跑php,但是不启动数据库

  方式2,  使用wamp环境,配置个虚拟主机


2.6 配置框架app key:php artisan key:generate



三、Laravel基础篇

3.1 路由

① 路由请求方式

get   post   any   put delete  patch  options match ...

//路由匹配方式
Route::match(['get','post'],'hi',function(){
   return 'leigong  nihao!';
});
//路由带参数方式
Route::get('index/{id}',function($id){
   return '编号是'.$id;
});

② CSRF保护

指向 web 路由文件中定义的 POSTPUT 或 DELETE 路由的任何 HTML 表单都应该包含一个 CSRF 令牌字段,否则,这个请求将会被拒绝。

1665816792475910.png


3.2 控制器创建

① 命令方式创建控制器

php artisan make:controller TestController                    默认路径Controllers目录下

php artisan make:controller Admin/AdminController     指定路径,Controllers/Admin目录下

image.png

image.png

② 手动创建控制器

...

③ 通过设置路由访问控制器

Route::访问方式('uri','sction')

Route::get('task','TaskController@index');
Route::get('task/read/{id}','TaskController@read');

④ 接收用户输入

④.① 使用Illuminate\Support\Facades\Input类

image.png

④.② 使用Illuminate\Support\Facades\Request类,静态接收请求参数

image.png

image.png


3.3 路由参数、路由重定向、视图

① 路由参数

①.① 限定路由参数1

//限定路由参数
Route::get('task/read/{id}','TaskController@read')->where('id','[\d]+'); //接收单参数
Route::get('task/more/{id}/{name}','TaskController@more')
   ->where(['id'=>'\d+','name'=>'[a-z]+']); //接收多参数

image.png

①.② 限定路由参数2

image.png


//假设某个id已经在模型绑定器设置为全局,但是在某个方法中又想允许接收参数是任意类型
Route::get('task/read/{qj_id}','TaskController@read')->where('qj_id','.*');

image.png

② 路由重定向

②.① 使用redirect方式

//路由重定向
Route::get('inx','TaskController@index');
Route::get('re','TaskController@re');
//Route::redirect('inx','re');
Route::redirect('inx','http://www.baidu.com/',301);

②.② 使用permanentRedirect方式,可以直接让路由跳转301状态码而不用设置


//不带参数直接301
Route::permanentRedirect('inx','re');

③ 视图路由

③.① 路由形势   Route::view('uri','名称','参数');


//视图路由
Route::view('vi','test.test',['name'=>'leigong']);

image.png

image.png

③.② 使用助手函数


//助手函数方式的路由视图
Route::get('vi2',function(){
  return view('test.test',['name'=>'墨菲特']);
});

③.③ 控制器返回视图

public function vi3(){
   return view('test.test',['name'=>'菲兹']);
}


④ 路由命名

④.①

//路由命名
Route::get('vi3','TaskController@vi3')->name('vvv');

控制器中可以通过助手函数获取url

public function vi3(){
   $url = route('vvv');
   //route('vvv',['id'=>100]);   //route助手函数带参数
   dump($url);
   return view('test.test',['name'=>'菲兹']);
}

④.②

使用redirect()结合route()生成重定向跳转


⑤ 路由分组

路由分组是为了让大量路由共享路由属性,包括中间件、命名空间

⑤.① 路由分组


//路由分组  第一个参数[]如果不写,那当占位符,空分组路由
Route::group([],function(){
  Route::get('vi6',function(){
      return 'vi6';
  });
  Route::get('vi7','TaskController@vi7');
});
//路由分组  第一个参数[]带分组前缀
Route::group(['prefix'=>'pre'],function(){
   Route::get('vi8',function(){
       return 'vi8';
   });
   Route::get('vi9','TaskController@vi7');
});
//推荐路由分组写法
Route::prefix('qa')->group(function(){
   Route::get('qa1',function(){
       return 'qa1';
   });
   Route::get('qa2','TaskController@vi7');
});


⑤.② 可以设置子域名


//可以设置子域名
Route::domain('127.0.0.1')->group(function(){
   Route::get('zyy',function(){
       return '子域名';
   });
});


⑤.③ 可以设置路由路径前缀,通过prefix设置

//路由前缀
Route::prefix('api')->get('vi5','TaskController@vi5');
Route::prefix('api')->get('index',function(){
   return 'index';
});

image.png

⑤.④ 可以指定命名空间


//指定命名空间
Route::namespace('admin')->group(function(){
   Route::get('qa3',function(){
       return 'qa3';
   });
   Route::get('qa4','ManagerController@index');
});



⑥ 单行为、回退、当前路由

⑥.① 单行为控制器 __invoke()方法

使用命令创建:php  artisan make:controller  控制器名称  --invokable


//单行为控制器
Route::get('one','Admin\OneController');  //不用写方法

image.png

⑥.② 路由回退

image.png


//路由回退
Route::fallback(function(){
   return redirect('/');
});

也可以做一个自己的404页面


//自定义404页面
Route::fallback(function(){
   return view('404');
});

image.png

⑥.③ 当前路由信息

//当前路由信息
Route::get('qa5','Admin\ManagerController@qa5');
Route::get('qa6',function(){
   dump(Route::current());
   dump(Route::current()->uri);
});
Route::get('qa7',function(){
   return Route::currentRouteName().PHP_EOL.Route::currentRouteAction();
})->name('qaqa');


⑦ 响应设置和重定向

⑦.① 响应设置

image.png

image.png

image.png

⑦.② 路由重定向

image.png

image.png

image.png

image.png


3.4 资源控制器

① 什么是资源控制器

image.png

创建命令:php artisan make:controller BlogController --resource

image.png

image.png

image.png

image.png

image.png

image.png

①④ 资源路由嵌套

//资源路由嵌套
Route::resource('blogs.comments','Admin\BlogController');   //edit


public function edit($art_id,$comm_id)
{
   return '文章id='.$art_id.PHP_EOL.'评论id='.$comm_id;
}

image.png        

①⑤ 资源浅层嵌套

image.png


3.5 表单伪造和CSRF保护

① 什么是CSRF攻击

image.png

② csrf使用

image.png

注意:有一种情况是没得选择的,只能使用csrf_token,就是使用ajax异步提交表单方式


③ 从csrf中排除列外路由 

image.png


image.png

image.png

image.png

image.png

image.png

image.png

image.png


image.png

image.png



3.6 视图

① 视图文件

image.png

② 加载视图

image.png

③ 变量分配与展示

image.png

image.png

image.png

compact()函数,在当前的符号表中查找该变量名并将它添加到输出的数组中,变量名成为键名而变量的内容成为该键的值!!!

image.png

④ 在模板中使用函数

语法:{{函数名(参数1,参数2)}}

image.png

 循环与分支

image.png

image.png

image.png

 模板继承

image.png

基础页面

image.png

其他子页面

image.png

 模板包含

语法:@include('模板文件名')    文件名不带后缀

image.png

 外部文件引入

image.png



3.7 数据库配置入门

① 数据库配置,本地测试直接配置.env文件

config/database.php文件

② 添加数据

image.png

返回添加数据的id

image.png

③ 取出单行数据

image.png

④ 取出单个指定字段值

image.png

⑤ 查询一些指定字段值

image.png

⑥ 排序

image.png

 分页

image.png


3.8 模型操作

① 理解

每张数据表都对应一个与该表进行交互的“model模型”

image.png

② 使用命令创建模型

php artisan make:model Home/User

image.png

image.png

image.png

③ 模型的使用方式

③.① 模型使用方式一

User::get();   等价于数据库的DB::table('user')->get();

③.② 模型使用方式二    实例化方式

$user = new User();   $user->get();


③.③ 模型添加数据

使用AR模式必须先实例化模型, 添加调用save()方法,返回布尔值

方式1

image.png

方式2

image.png

image.png

image.png

③.④ 查询操作,结果集默认是一个对象

image.png

image.png

image.png

image.png