1.Laravel简介

1.1.简介

Laravel是一款简洁、优雅的基于面向对象和MVC软件设计模式的php web开发框架.
优点:

  • 具有简洁易于理解的语法
  • 安全机制齐全,防止sql注入,防usrf表现优秀
  • 具有路由功能提高网址安全性,有利于url地址的优化
  • 具有中间件控制网址访问和日志记录,过滤非法请求
  • 提供大量开源库

缺点:

  • 源代码复杂,新手上手难度较高
  • 提供强大的开放功能同时也牺牲了部分效率

Laravel框架广告语:
为WEB艺术家创造的php框架
目前大部分框架的公共特点:

  1. 单入口,所有的请求必须从单入口开始,主要便于管理(统一的参数过滤)
  2. MVC思想(分层思想,主要为了协同开发,实现后期的维护方便)
  3. ORM操作数据库(关联模型):AR模式

注意:Laravel框架所有的url访问都必须事先定义好路由规则.

1.2.开发环境配置与要求

Laravel框架的运行对环境有严格的要求.

php.ini配置文件需要开启的扩展:

extension=php_openssl.dll
extension=php_pdo_mysql.dll
extension=php_mbstring.dll
extension=php_fileinfo.dll(验证码代码依赖需要该扩展)
extension=php_curl.dll(主要用于请求的发送)

httpd.conf配置文件需要开启的模块:

LoadModule deflate_module modules/mod_deflate.so
LoadModule rewrite_module modules/mod_rewrite.so

1.3.PHP的注意事项(重要)

  1. 在php安装好后将php.exe的位置添加到环境变量里面去(如果以前添加过其他版本要删除掉)
  2. 在确保添加环境变量后,通过php -v 运行得到php版号与实际运行版号一致

image.png

1.4.composer介绍

1.4.1.什么是composer?

composer是php管理依赖关系的工具,可以通过composer.json文件声明需要依赖的文件,composer就会帮你安装这些依赖库文件.
composer是一个工具,是为php项目准备的软件管家。
工作原理:
image.png
下载地址:链接

1.4.2.composer安装

注意:
安装前开启php中openssl扩展.
安装composer需要明确php.exe文件路径.
安装composer需要联网
安装完成后在cmd中 输入”composer”查看是否安装成功
注意:如果确认已经安装好composer,但是在cmd中运行composer命令的时候没有出现上述的界面,
则可能是在安装过程中,软件自行设置环境变量失败导致的。此时需要自己添加环境变量.

1.4.3.composer部署

第一步:切换镜像建议为国内镜像:(修改composer的全局配置文件)
全局配置

  1. composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

取消配置

composer config -g --unset repos.packagist

1.4.4.遇到问题?

  1. 建议升级最新版composer: composer self-update
  2. 执行诊断命令: composer diagnose
  3. 清除缓存: composer clear
  4. 如果项目安装其它源文件,则需要更新composer.lock文件命令: composer update —lock

    1.5.Laravel安装

    如果需要安装指定版本复制一号代码
    最新版二号代码

    composer create-project --prefer-dist laravel/laravel=8.* blong
    composer create-project --prefer-dist laravel/laravel blog
    

    命令含义:
    image.png
    其中:
    blong意味在当前下创建blong文件夹。并将项目下载至其中。如有特殊需求可以自定义存储路径
    laravel/laravel=8.* 意味下载第8代后缀的版本。(默认下载最新版)
    注意:通常我们安装完Laravel框架之后,还需要为使用此框架的网站配置 伪静态 文件,内容如下:

    <IfModule mod_rewrite.c>
     <IfModule mod_negotiation.c>
         Options -MultiViews -Indexes
     </IfModule>
    
     RewriteEngine On
    
     # Handle Authorization Header
     RewriteCond %{HTTP:Authorization} .
     RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
     # Redirect Trailing Slashes If Not A Folder...
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{REQUEST_URI} (.+)/$
     RewriteRule ^ %1 [L,R=301]
    
     # Handle Front Controller...
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule ^ index.php [L]
    </IfModule>
    

    2.Laravel入门(路由)

    所有的 Laravel 路由都在 routes 目录中定义,这些文件都由框架自动加载。
    routes/web.php 文件用于定义 web 界面的路由。这里面的路由会被分配给 web 中间件组,它提供了会话状态和 CSRF 保护等功能。
    routes/api.php 中的路由都是无状态的,并且被分配了 api 中间件组。

大多数的应用构建,都是以在 routes/web.php 文件定义路由开始的。可以通过在浏览器中输入定义的路由 URL 来访问 routes/web.php 中定义的路由。例如,你可以在浏览器中输入 http://你的网址/user 来访问以下路由:

use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);

定义在 routes/api.php 文件中的路由是被 RouteServiceProvider 嵌套在一个路由组内。在这个路由组中,将自动应用 /api URI 前缀,所以你无需手动将其应用于文件中的每个路由。你可以通过修改 RouteServiceProvider 类来修改前缀和其他路由组选项。

2.1.路由配置文件位置

image.png

2.2.路由文件的配置

2.2.1.默认根路由

/代表根路由 一般用于设置页面首页

Route::get('/',function(){
   return view('welcome');
});

2.2.2.路由定义格式

Route::请求方式(‘设定的请求url’,匿名函数或者控制器响应方法);

Route::get('hello',function (){
   return '我是hello';
});

image.png

2.2.3.请求方式有哪些?

官方文档:链接
路由允许你注册响应的请求有:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

如果注册一个响应多个http请求时,可以用match方法或者any方法
match方法:表示匹配用户指定的几个请求类型(通过第一个参数去指定)的请求;
any方法:表示匹配路由所支持的全部请求;

Route::match(['get', 'post'], '/', function () {
    //
});

Route::any('/', function () {
    //
});

2.2.4.CSRF保护 跨站请求伪造(csrf)攻击

官方手册:链接
文件中定义的post;put’patch或者delete路由的任意html表单都需要包含一个CSRF令牌字段,否则请求会被拒绝访问,也可以通过设置白名单来访问;
image.png

2.3.路由参数

路由参数就是路由传递的参数
参数分为必选参数和可选参数.
必选参数:一旦定义了,在地址中就必须传递,不传递则会报错.

Route::get('text4/{id}',function ($id){
  //可以不带参数传递,设定有默认值
    return $id;
});
Route::get('/text3/{id?}',function($id=1){
  //必须传递参数不然报错
    return $id;
});

2.4.路由别名(重点) ->name

路由中设定:

Route::get('aaaaa/bbbbb',function (){
    return route('ab');
})->name('ab');

模板中应用:
image.png
网页显示:
image.png
扩展:查看系统已有路由命令
终端输出指令:php artisan route:list
image.png

2.5.路由群组 group

路由组允许你在大量路由之间共享路由属性,例如中间件,而不需要为每个路由单独定义这些属性。
嵌套的组尝试智能地「合并」其属性及其父组。中间件和 where 条件语句在附加名称和前缀时被合并。在适当的情况下,命名空间的分隔符和斜线会被自动添加到 URI 前缀中。

群组是为了管理方便,可以把他们放到一个路由中,这个组就称为路由群组

Route::group(['prefix'=>'admin'],function(){
    Route::group(['prefix'=>'member'],function (){
       Route::get('add',function (){
           //匹配"admin/member/add"
       });
    });
});
Route::group(['prefix'=>'index'],function (){
    Route::group(['prefix'=>'member'],function (){
        Route::get('add',function (){
            //匹配"index/member/add"
        });
    });
});

3.控制器使用

主要用于负责接受用户输入请求,调度模型处理数据最后利用视图展示数据.

3.1.控制文件位置

image.png
其中controller.php文件是框架的基类控制器

3.2.控制文件命名

按照大驼峰+Controller.php创建
分目录管理:admin下面创建控制器
php artisan make:controller admin/PhotoController

3.3.控制器路由(项目以该方式为主)

3.4.接收用户输入(request)

官方文档:链接

3.4.1.接收普通请求:

控制器:
image.png
路由配置文件:
image.png
路由文件:
image.png

3.4.2.常见的操作


  1. 获取请求路径 path( )

path 方法返回请求的路径信息。因此,
如果接收到的请求目标是 http://domain.com/foo/bar,则 path 方法会返回 foo/bar:

$request->path()

补充: is() 方法 验证请求的路径是否与给定的模式匹配。使用此方法时,可以将 * 字符作为通配符:

if ($request->is('admin/*')) {
    //
}
  1. 获取请求的url地址 url( )

    $request->url()   //没有包含参数
    $request->fullUrl()  //包含地址中携带的参数
    
  2. 获取请求方式 method( )

    $request->method()  //获取请求方式
    $request->isMethod('get') //判断请求是否为指定方式
    

    3.4.3.获取输入

    1.获取全部输入 all( )
    $input = $request->all();
    

    2.获取其中一个数据 input( )

    ```php $now = $request->input(‘id’); $now = $request->input(‘id’,’1’); //设定默认值为1

//处理表单数据 如:多选框数据 $name = $request->input(‘products.0.name’);

$names = $request->input(‘products.*.name’);

<a name="ePrh3"></a>
##### 3.获取部分数据 only()
```php
//只获取设定的字段数据
$input = $request->only(['username', 'password']);

$input = $request->only('username', 'password');
//获取除设定以外的数据

$input = $request->except(['credit_card']);

$input = $request->except('credit_card');

4.判断数据是否传递 has( )
$request->has('id'); //判断id是否存在 也可以是数组

5.闪存数据并跳转 withInput()
return redirect('form')->withInput();

return redirect('form')->withInput(
    $request->except('password')
);

4.数据库DB类(重点)

4.1 数据库配置

4.1.1.修改.env文件

image.png

4.1.2.修改confug下面的database.php文件

image.png

4.1.3 在控制器里面引入DB类

use Illuminate\Support\Facades\DB;

4.2 增加

//插入成功返回true
DB::table('member')->insert(['username'=>'小花','gender'=>18]) 
//  插入成功返回插入id
DB::table('member')->insertGetId(['username'=>'小明','gender'=>18])

4.3 修改

$rows = DB::table('member')->where(['id'=>1])->update(['username'=>'小牛']);
//返回受影响行数

4.4 删除(了解)

$rows = DB::table('member')->where('id',1)->delete();

4.5 查找

1.取出基本数据

$rows = DB::table('member')->get(); 
//  返回值为一个集合对象

image.png
循环输出

$rows = DB::table('member')->get();
    foreach ($rows as $v){
        echo $v->username,$v->gender,"<br>";
    }

image.png

2.取出单行数据

$rows = DB::table('member')->first();
//相当于 limit1 只获取一条数据

适用于:
使用first的场景:登录验证、详情页面、修改功能等
使用get的场景:列表页面、设计接口等

3.获取某一个具体的值(一个字段)

$rows = DB::table('member')->where('id',2)->value('username');

获取ID为2的 username字段的值:
image.png

4.获取某些字段的数据

$rows = DB::table('member')->pluck('username','id');
//获取username字符的所有数据 id作为键值

$rows = DB::table('member')->select('id','username')->get();

5.排序操作

$rows = DB::table('member')->orderBy('id','desc')->get();
//desc---降序   asc---升序

6.分页操作

$rows = DB::table('member')->limit(2)->offset(0)->pluck('username','id');
//limit表示每页显示的条数 offset表示从什么地方开始

注意:具体的查询操作方法一般放在连贯操作的最后.辅助方法放在中间,并且其先后顺序是无所谓的.

4.6 执行sql语句

  1. 执行原生查询语句

    DB::select('select语句')
    
  2. 执行原生插入语句

    DB::insert()
    
  3. 执行原生修改语句

    DB::update()
    
  4. 执行原生删除语句

    DB::delete()
    
  5. 执行一个通用语句(如:create table等 建表)

    DB::statement()