从0开始了解Laravel(不定时更新)


一、Laravel是什么?

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
 功能特点:
  1、语法更富有表现力
  2、高质量的文档
  3、丰富的扩展包
  4、开源、托管在GITHUB上


二、安装步骤

1.安装PHP以及Composer

本文使用的laravel版本:8.47.0

composer安装参考:Composer 安装与使用


2.修改Composer镜像

修改 composer 的全局配置文件(文档有两种方式修改,这里使用官方推荐的方式进行修改)

打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

2022-3-1:在部署laravel项目时出现了
在这里插入图片描述
更换了镜像就安装成功了
新镜像:composer config -g repo.packagist composer https://packagist.org


3.Composer部署Laravel项目

创建项目语法:
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:

  • 安装最新版本

composer create-project laravel/laravel --prefer-dist ./asin

  • 安装指定版本

composer create-project laravel/laravel=8.4.* --prefer-dist ./asin

命令解释:

composer:表示执行composer程序
create-project:通过composer去创建项目
laravel/laravel::需要创建的项目名称
--prefer-dist:优先下载压缩包方式,而不是直接从github上下载源码(clone)
./:表示创建的项目目录名称,也可以是一个目录名(这里最好在./后面加上一个文件夹名,好新建一个项目文件夹)

文件目录:
在这里插入图片描述

cmd界面:
在这里插入图片描述

1.安装的laravel版本是v8.5.20,如果不指定版本号默认是安装最新版本
2.如果安装过程没有变化的情况,可以尝试按下Enter键


4.目录结构分析

(1)app目录:项目的核心目录,主要用于存放核心代码,也包括控制器、模型。

  • 比如控制器存放如下位置 app/http/controllers

在这里插入图片描述

  • 模型文件存放位置,模型文件直接写在Models目录即可,但是也可以在该目录下建立其他目录用于专门存放模型文件,例如建立 Admin目录专门存放后台需要的模型文件,建立Home 目录存放前台模型文件目录

在这里插入图片描述

(2)bootstrap目录:laravel启动目录
autoload.php文件用于自动载入需要的类文件
在这里插入图片描述

(3)config目录:项目的配置目录,主要存放配置文件,比如数据库的配置
在这里插入图片描述

部分文件用处:
App.php:项目主要配置文件;
Auth.php:用于定义用户认证(登录)的配置文件;
Database.php:针对数据库的配置;
Filesystems.php:上传文件、文件断储需要使用到的配置文件;

(4)database目录:数据迁移目录
存储跟数据表相关的操作类文件(迁移文件【创建数据库的类文件】、种子文件【存放一些数据表的数据填充文件】)。
在这里插入图片描述

(5)public目录:项目的入口文件和系统的静态资源目录(css、img、js、uploads)
后期使用的外部静态文件(js、css、图片等)都需要放到Public目录下

在这里插入图片描述

重点是项目单一入口的文件也在这个目录下,因此后续配置虚拟主机的时候需要将站点位置指定到public下。

(6)resources目录:存放视图文件,还有语言包文件的目录

在这里插入图片描述

lang目录:语言包目录(如果项目需要本地化则需要配置语言包)
views目录:视图文件存储目录(视图文件也可以分目录管理)

(7) routes目录:是定义路由的目录,web.php是定义路由的文件

在这里插入图片描述

(8) storage目录:主要是存放缓存文件和日志文件,注意,如果在linux环境下,该目录需要有可写权限。(后期用户上传文件如果存在本地则也在storage下)

在这里插入图片描述

app目录:存放用户上传的文件
framework目录:存放框架运行时的缓存文件
logs目录:日志目录

(9) vendor目录:主要是存放第三方的类库文件,laravel思想主要是共同的开发,不要重复地造轮子(例如,里面可能存在验证码类,上传类,邮件类),该目录还存放laravel框架的源码。注意如果要使用 composer 软件管理的,composer下载的类库都是存放在该目录下面的。

在这里插入图片描述

(10) .env文件:主要是设置一些系统相关的环境配置文件信息,cofig目录里面的文件配置内容一般都是读取该文件里面的配置信息( config里面的配置项的值基本都是来自.env文件)

(11) artisan脚手架文件 :主要用于生成的代码的(自动生成),比如生成控制器,模型文件等
执行命令:#php artisan 需要执行的指令

要求1:php必须添加环境变量,并且保证版本;
要求2:artisan必须存在命令行当前的工作路径下;

(12) composer. json依赖包配置文件:声明当前需要的软件依赖,但是不能删除, composer需要使用

(13) 需要重点掌握的目录(频繁使用)

目录作用
app保存模型文件(默认)
app / Http / Controllers保存控制器文件
resources / views保存视图文件
config配置文件目录
routes存放路由文件
database / migrations存放数据库迁移文件(操作数据表结构)
database / seeds存放数据库种子文件(模拟测试数据)

5.项目启动方式(推荐使用方式二)

方式一:cmd命令(cmd当前地址,需指向项目目录位置)

php artisan serve

弹出以下界面,即可访问:http://127.0.0.1:8000 在这里插入图片描述

项目启动成功:
在这里插入图片描述

不推荐使用:
①能执行PHP代码,但是不启动数据库
②使用该方式启动后,如果修改了项目的配置.env的话,则需要重新启动才会生效


方式二:使用 wamp 或 lamp 环境

我这边使用的是PhpStudy进行项目发布。

(1)虚拟主机配置:

根目录是指向项目的 public目录 哦

在这里插入图片描述
(2)修改hosts文件:
根据这个地址找到hosts文件
C:\Windows\System32\drivers\etc

不知道什么情况在我找到drivers目录后,里面没有显示任何东西(包括etc目录),显示隐藏文件选项也打开了,也看不到对应的选项后面是使用了Everything文件搜索hosts才找出来的,可以打开,但是目录里还是没有东西,就很迷惑,目前也没找到这个问题是怎么出现的
2022-3-1:phpstudy在创建后会同步hosts,不需要自己去配置,创建完重启下服务即可

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我自身的解决方式:是将Everything搜索出来的hosts文件复制到桌面上(没有权限修改的解决方式),然后修改里面的内容,保存,然后再复制hosts文件粘贴到上面跳转路径的etc目录,会提示覆盖文件操作,选确定覆盖了就好了,再重启一下PhpStudy中的Apache,使用上方定义的域名就可以访问了。


三、路由规则的使用

  • 路由配置文件:routes \ web.php
  • 在web.php中配置路由(重点)
  • laravel的语法严格,报错时多注意看是否有缺少分号 ‘;’

1.默认根路由

在这里插入图片描述

2.路由定义格式

Route:: 请求方式(请求的URL,匿名函数或控制响应的方法)

在这里插入图片描述

在这里插入图片描述

自定一个路由
在这里插入图片描述
在这里插入图片描述

(1)laravel访问二级页面404问题解决方案

我在这里出现了一个问题,当我在浏览器中输入 项目域名/home 时,浏览器返回的是404的报错,虽然不太了解具体是什么问题,但是还是找到了解决方式。
传送门:解决 laravel 添加url 出现404错误

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 方法注册一个路由来响应所有HTTP请求:

// math:匹配
// any:任意
Route::match(['get', 'post'], '/', function() {
		
});

Route::any('foo', function() {

});

常用的记住四个:get / post / match / any
Get表示支持get请求方式的路由
Post表示支持pot请求方式的路由;
Match表示匹配固定(自己定义)的请求方式的路由
Any表示匹配任意请求方式的路由


语法上 math 比 get / post / any 多一个参数
Route:match(匹配的请求类型, 地址, 回调)
匹配请求类型要求是数组格式的声明(建议使用短数组)

4.路由参数传递(推荐使用第三种)

(1)必选参数

有时我们需要在路由中捕获URI片段,比如,要从URL中捕获用户ID,需要通过如下方式定义路由参数:


Route::get('user/{id}', function($id) {
	return 'User' . $id;
});

在这里插入图片描述

路由参数的传递通过路由地址中的" {参数名} “的形式来进行传递,该形式是必选参数的形式,可以选的则使用” {参数名?} "。

(2)可选参数

有时候可能需要指定可选的路由参数,这可以通过在参数名后加一个””标记来实现,这种情况下需要相应的变量指定默认值:

//可选参数
Route::any('user11/{id?}', function($id = '47') {
	echo '可选参数的UserID是:' . $id;
});

在这里插入图片描述

(3)通过?的形式进行参数传递

可不需要去编写路由,直接进行参数传递

//通过?的形式传递get参数
Route::any('user3', function() {
	echo '通过?的形式传递的UserID是:' . $_GET['id'];
});

在这里插入图片描述

5.路由别名

路由别名相当于在路由定义的时候,为路由起了一个别名,在以后的程序中可以通过这个别名来获取路由的信息。

// -> name('名字')
Route::any('user3', function() {
	echo '通过?的形式传递的UserID是:' . $_GET['id'];
}) -> name('zhansan');

调用该路由则可以写成:route(‘名字’);

查看系统已经有的路由命令:#php artisan route:list

在这里插入图片描述

6.路由群组(理解)

当URL都有 /admin 做前缀,为了管理方便,可以把他们放到一个路由分组中。
使用prefⅸ属性指定路由前缀,比如,你想要为所有路由URIs前面添加前缀 admin

语法:Route:group(公共属性数组, 回调函数)
在后期会接触到 middlevare 属性(中间件)

// 路由群组
Route::group(['prefix' => 'admin'], function() {
    Route::get('test1', function() {
        echo '你好,我是test1';
        // 匹配 "/admin/test1" URL
    });
    Route::get('test2', function() {
        echo '你好,我是test2';
        // 匹配 "/admin/test2" URL
    });
    Route::get('test3', function() {
        echo '你好,我是test3';
        // 匹配 "/admin/test3" URL
    });
});

在这里插入图片描述



四、控制器使用

1.控制器文件位置

…\app\Http\Controllers

在这里插入图片描述

2.控制器命名

命名方式:

大驼峰的控制器名 + Controller.php

在这里插入图片描述


3.创建控制器

cmd 指令(两种方式)

php artisan make:controller [路径 + 控制器名 / 控制器名]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

<?php
// (命名空间的三元素:常量、方法、类)
// 声明命名空间
namespace App\Http\Controllers;
// 引入
use Illuminate\Http\Request;
// 类继承
class TestController extends Controller
{
    //
}


4.控制器路由

即,如何使用路由规则调用控制器下的方法,而不再走回调函数。
路由设置格式基本相同,只是将匿名函数换成“控制器类名@方法名”
laravel8 定义格式:(注意版本哟)

Route:请求方式(‘URL路径’, [控制器名::class, ‘方法名’]);

//  web.php
//  引入命名空间
use App\Http\Controllers\TestController;
//  路由定义
Route::get('/home/test/test1', [TestController::class, 'test1']);

在这里插入图片描述

遇到的一个小问题:项目中的app目录是以小写字母的形式呈现,而命名空间所引入的App,首位字母是大写,导致我使用VsCode复制文件相对路径:app\Http\Controllers\TestController用作引入无法访问,给出无法找到的错误,换成App\Http\Controllers\TestController才可进行访问,对于这里可能是我本身不够熟悉laravel

在这里插入图片描述

5.控制器分目录管理

①先建立相关的区分目录

在这里插入图片描述
②创建控制器文件(使用artisan命令创建)

在这里插入图片描述

在这里插入图片描述
③编写测试代码
在这里插入图片描述

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TestController;
//	引入
use App\Http\Controllers\Home;
use App\Http\Controllers\Admin;
//	调用
Route::get('/home/test1', [Home\IndexController::class, 'test1']);
Route::get('/home/test1', [Admin\IndexController::class, 'test1']);

在这里插入图片描述

五、DB类操作数据库(重点)

1.创建数据库

CREATE TABLE test1(
	id INT PRIMARY KEY auto_increment,
	name VARCHAR(32) NOT NULL,
	age TINYINT UNSIGNED NOT NULL,
	email VARCHAR(32) NOT NULL
) ENGINE myisam CHARSET utf8;

2.数据库在laravel框架中的配置

在.env文件中

在这里插入图片描述

注意:如果是 php artisan serve方式启动的,修改了配置文件,则需要重新启动,才能读取修改后的配置文件;如果是 wamp / lamp等环境则不需要重启。

3.数据库操作

在test控制器中引入DB
在app.php中已经定义别名为:DB,可以直接引入,不需要写太长的命名空间

在这里插入图片描述

TestController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
// 引入DB
use DB;
class TestController extends Controller
{
    public function addTest() {
      echo 'add';
    }
    public function deleteTest() {
      echo 'delete';
    }
    public function updateTest() {
      echo 'update';
    }
    public function selectTest() {
      echo 'select';
    }
}

web.php

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TestController;

Route::group(['prefix' => 'home/admin'], function() {
  Route::get('add', [TestController::class, 'addTest']);
  Route::get('delete', [TestController::class, 'deleteTest']);
  Route::get('update', [TestController::class, 'updateTest']);
  Route::get('select', [TestController::class, 'selectTest']);
});

在这里插入图片描述

(1)增加(insert)

向数据库增加数据

语法:

DB::table('表名):操作的表名
insert(数组):同时添加多条或一条数据,返回值:布尔值
insertGetId():只可插入一条数据,返回值:自增id

public function addTest() {
  // 定义关联操作的表
  //链式操作
  //DB::table('test1') -> insert();
  $db = DB::table('test1');
  // 使用insert增加记录
  $result = $db -> insert([
    [
      'name' => '锤石',
      'age' => '55',
      'email' => 'chuishi@163.com'
    ],
    [
      'name' => '卢锡安',
      'age' => '23',
      'email' => 'luxian@163.com'
    ],
    [
      'name' => '塞纳',
      'age' => '21',
      'email' => 'saina@163.com'
    ],
  ]);
  
  $result = $db -> insertGetId([
    'name' => '死歌',
    'age' => '111',
    'email' => 'saina@163.com'
  ]);
  dd($result);
}

在这里插入图片描述

(2)修改(update)

语法:共三种方式
update():可以修改整个记录中的全部字段
increment():用于修改数字字段的数值(递增)
decrement():用于修改数字字段的数值(递减)
返回值:受到影响的行数

update(数组)
increment(字段, 数值): 字段需为数字类型,每次运算增加相应数值,不写数值时运算一次 +1
decrement(字段, 数值): 字段需为数字类型,每次运算减少相应数值,不写数值时运算一次 -1
increment()、decrement() ,存在局限性 [ 典型的应用:记录登录次数、单一数值的递增或递减]

Where语法:(条件,运算符为“ = ”时,可省略不写)

where(字段, 运算符, 值) 这个语法是并且(and)关系语法
orWhere(字段, 运算符, 值) 这个语法是或者(or)关系语法


public function updateTest() {
  // 修改id为1的名字为亚斯塔娜
  $db = DB::table('test1');
  // $result = $db -> where('id', '1')
  $result = $db -> where('id', '=', '1') -> update([
    // 需要修改字段的键值对
    'name' => '亚斯塔娜'
  ]);
  dd($result);
}


在这里插入图片描述

(3)查询(select)

查询全部数据

get():查询全部数据,返回值:结果集

public function selectTest() {
  $db = DB::table('test1');
  // 查询全部数据
  $data = $db -> get();
  // $value 类型为对象
  foreach($data as $key => $value) {
    echo "id是:{$value -> id},名字是{$value -> name},邮箱是:{$value -> email}<br/>";
  }
}

在这里插入图片描述

有条件限制的查询结果

where() 跟 get() 一起使用

public function selectTest() {
  $db = DB::table('test1');
  // 查询id > 2的数据
  $data = $db -> where('id', '>', '2') -> get();
  foreach($data as $key => $value) {
    echo "id是:{$value -> id},名字是{$value -> name},邮箱是:{$value -> email}<br/>";
  }
}

在这里插入图片描述

取出单行数据
语法:

first(),返回值:对象(等价于limit 1)

 public function selectTest() {
  $db = DB::table('test1');
  // 取出单行数据
  $data = $db -> where('id', '>', '1') -> first();
  dd($data);
}

在这里插入图片描述
获取某个字段的值(一个字段)
语法:

value(‘字段’):返回值:第一条数据

public function selectTest() {
  $db = DB::table('test1');
  // 获取name字段
  $data = $db -> where('id', '2') -> value('name');
  dd($data);
}
```php

在这里插入图片描述

获取某些字段的值(多个字段)
语法:

select(‘字段1’, ‘字段2’, ‘…’)

public function selectTest() {
 $db = DB::table('test1');
  // 获取某些字段的值(多个字段)
  $data = $db -> select('id', 'name as username') -> get();
  dd($data);
}

在这里插入图片描述

排序操作
语法:

orderBy(‘字段’, ‘[asc, desc]’)

public function selectTest() {
  $db = DB::table('test1');
  // 按年龄降序排序
  $data = $db -> orderBy('age', 'desc') -> get();
  dd($data);
}

在这里插入图片描述

分页操作
语法:

limit(数字):表示限制输出的条数
offset(数字):从什么地方开始

public function selectTest() {
  $db = DB::table('test1');
  // 分页操作	
  // limit(3):限制输出3条数据
  // offset(1):第一个数据去除,从第二个数据开始 
  $data = $db -> limit(3) -> offset(1) -> get();
  dd($data);
}

在这里插入图片描述

(4)删除(delete)

在删除中,有两种删除方式:物理删除(本质就是删除数据)、逻辑删除(本质是修改数据)
一些数据来之不易,实际操作中很少会使用物理删除,一般都是通过逻辑删除使用户看不见就可以了,实际上数据依旧存在,这里了解下删除功能怎么实现就可以了

语法:

delete():删除匹配的数据,返回值:受影响的行数

public function deleteTest() {
  $db = DB::table('test1');
  // 删除id为3的数据
  $result = $db -> where('id', '3') -> delete();
  dd($result);
}

在这里插入图片描述

删除全部数据,仅保留表结构(了解即可)
语法:

truncate():返回值:不明,运行结果返回的是null

public function deleteTest() {
  $db = DB::table('test1');
  // 删除全部数据,仅保留表结构
  $result = $db -> truncate();
  dd($result);
}

在这里插入图片描述

(5)执行自定义的SQL语句(了解即可)

语法:

  • 执行任意的 insert、update、delete 语句[影响记录的语句使用 statement 语法]

DB::statement(‘insert、update、delete 语句’);

  • 执行任意的 select 语句[不影响记录的语句使用 select 语法]

$res = DB::select(‘select 语句’);

public function selectTest() {
  // 自定义查询语句
  $data = DB::select('select * from test1');
  dd($data);
}

在这里插入图片描述

public function updateTest() {
  // 修改id为1的名字为易大师
  $result = DB::statement("update test1 set name = '易大师' where id = 1");
  dd($result);
}

在这里插入图片描述


总结

本意是用来给自己记录一些学习的事情,忘了的时候也可以翻一翻,加深下印象,文章有错误的地方拜托各位指出,有错会尽快修改的。

以上资料来自B站视频教程(传送门),视频是使用的Laravel5.x的版本,与现在Lara8有很多语法不同,这个需要注意:PHP web开发教程4天全面深入浅出Laravel 框架,快速网站开发必备技能

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值