1.Laravel简介
1.1.简介
Laravel是一款简洁、优雅的基于面向对象和MVC软件设计模式的php web开发框架.
优点:
- 具有简洁易于理解的语法
- 安全机制齐全,防止sql注入,防usrf表现优秀
- 具有路由功能提高网址安全性,有利于url地址的优化
- 具有中间件控制网址访问和日志记录,过滤非法请求
- 提供大量开源库
缺点:
- 源代码复杂,新手上手难度较高
- 提供强大的开放功能同时也牺牲了部分效率
Laravel框架广告语:
为WEB艺术家创造的php框架
目前大部分框架的公共特点:
- 单入口,所有的请求必须从单入口开始,主要便于管理(统一的参数过滤)
- MVC思想(分层思想,主要为了协同开发,实现后期的维护方便)
- 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的注意事项(重要)
- 在php安装好后将php.exe的位置添加到环境变量里面去(如果以前添加过其他版本要删除掉)
- 在确保添加环境变量后,通过php -v 运行得到php版号与实际运行版号一致
1.4.composer介绍
1.4.1.什么是composer?
composer是php管理依赖关系的工具,可以通过composer.json文件声明需要依赖的文件,composer就会帮你安装这些依赖库文件.
composer是一个工具,是为php项目准备的软件管家。
工作原理:
下载地址:链接
1.4.2.composer安装
注意:
安装前开启php中openssl扩展.
安装composer需要明确php.exe文件路径.
安装composer需要联网
安装完成后在cmd中 输入”composer”查看是否安装成功
注意:如果确认已经安装好composer,但是在cmd中运行composer命令的时候没有出现上述的界面,
则可能是在安装过程中,软件自行设置环境变量失败导致的。此时需要自己添加环境变量.
1.4.3.composer部署
第一步:切换镜像建议为国内镜像:(修改composer的全局配置文件)
全局配置
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
取消配置
composer config -g --unset repos.packagist
1.4.4.遇到问题?
- 建议升级最新版composer: composer self-update
- 执行诊断命令: composer diagnose
- 清除缓存: composer clear
如果项目安装其它源文件,则需要更新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命令含义:

其中:
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.路由配置文件位置
2.2.路由文件的配置
2.2.1.默认根路由
/代表根路由 一般用于设置页面首页
Route::get('/',function(){
return view('welcome');
});
2.2.2.路由定义格式
Route::请求方式(‘设定的请求url’,匿名函数或者控制器响应方法);
Route::get('hello',function (){
return '我是hello';
});
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令牌字段,否则请求会被拒绝访问,也可以通过设置白名单来访问;
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');
模板中应用:
网页显示:
扩展:查看系统已有路由命令
终端输出指令:php artisan route:list
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.控制文件位置
3.2.控制文件命名
按照大驼峰+Controller.php创建
分目录管理:admin下面创建控制器
php artisan make:controller admin/PhotoController
3.3.控制器路由(项目以该方式为主)
3.4.接收用户输入(request)
官方文档:链接
3.4.1.接收普通请求:
3.4.2.常见的操作
- 获取请求路径 path( )
path 方法返回请求的路径信息。因此,
如果接收到的请求目标是 http://domain.com/foo/bar,则 path 方法会返回 foo/bar:
$request->path()
补充: is() 方法 验证请求的路径是否与给定的模式匹配。使用此方法时,可以将 * 字符作为通配符:
if ($request->is('admin/*')) {
//
}
获取请求的url地址 url( )
$request->url() //没有包含参数 $request->fullUrl() //包含地址中携带的参数获取请求方式 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文件
4.1.2.修改confug下面的database.php文件
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();
// 返回值为一个集合对象

循环输出
$rows = DB::table('member')->get();
foreach ($rows as $v){
echo $v->username,$v->gender,"<br>";
}
2.取出单行数据
$rows = DB::table('member')->first();
//相当于 limit1 只获取一条数据
适用于:
使用first的场景:登录验证、详情页面、修改功能等
使用get的场景:列表页面、设计接口等
3.获取某一个具体的值(一个字段)
$rows = DB::table('member')->where('id',2)->value('username');
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语句
执行原生查询语句
DB::select('select语句')执行原生插入语句
DB::insert()执行原生修改语句
DB::update()执行原生删除语句
DB::delete()执行一个通用语句(如:create table等 建表)
DB::statement()



