目录
控制器
模型
视图
MVC https://www.bilibili.com/video/BV1kE411Z79P
官网: https://laravel.com/
中文官网: http://www.golaravel.com/
中文社区: https://laravel-china.orgl
大部分框架的公共特点
- 单入口
- MVC的思想
- ORM操作数据库(Object Relations Model)对象关系映射/模型
安装
注意事项
安装好php之后需要将php.exe的位置的目录添加到环境变量中去
确保添加到环境变量之后,能通过命令"php -v"运行得到的结果中的PHP版本号与实际运行的版本号一致(phpinfo())
mac的设置环境变量方法
编辑".zshrc"文件,加入:
export PATH=/Applications/XAMPP/xamppfiles/bin:$PATH:.
什么是composer?
可以看作是软件管家,
如上图,composer可以去packagist应用市场里边下载软件,但是该市场只给返回软件的地址,对应的软件都是在github里边存储的,最终下载的软件是从github返回的。
https://packagist.org
安装composer
使用composer方式部署laravel项目
第一步:切换镜像
这里使用阿里的镜像 使用阿里云composer镜像为国内composer加速
所有项目都会使用该镜像地址:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
取消配置还原到默认的地址:
composer config -g --unset repos.packagist
第二步:composer部署laravel项目【重点】
composer create-project laravel/laravel --prefer-dist ./
命令解释:
composer :表示执行composer程序
create-project :通过composer去创建项目
laravel/laravel :需要创建的项目名称
--prefer-dist :优先下载压缩包方式,而不是直接从github.上下载源码(克隆)
./ :表示创建的项目目录名称,也可以是一个目录名
比如创建一个名为shop的laravel项目
#composer create-project laravel/laravel --prefer-dist shop
注意,如果要下载其他版本,比如5.4版本中最新小版本号,可以使用这个命令
composer create-project laravel/laravel=5.4.* --prefer-dist edu
composer更新 #composer self-update
laravel的目录结构
1. app目录:项目的核心目录,存放核心代码,控制器、模型
2. bootstrap目录:laravel启动目录
3. config目录:项目的配置目录,
App.php: 项目主要配置文件;
Auth.php: 用于定义用户认证(登录)的配置文件;
Database.php: 针对数据库的配置;
Filesystems.php: 上传文件、 文件存储需要使用到的配置文件;
4. database目录:数据迁移目录
以前创建数据表都是通过SQL语句
现在是通过类,称为迁移文件【创建数据表的类文件】,
5. public目录,项目的入口文件和系统的静态资源目录
6. resource目录,存放视图文件,还有就是语言包文件的目录
Lang目录:语言包目录(如果项目需要本地化则需要配置语言包)
Views目录:视图文件存储目录(视图文件也可以分目录管理)
7. routes目录:定义路由的目录,web.php是定义路由的文件
8. storage目录:主要是存放缓存文件和日志文件,注意,如果在linux 环境下,该目录需要有可写权限。(后期用户上传文件如果存在本地则也在storage下)
app目录,存放用户上传文件
Framework:框架运行时的缓存文件
Logs:日志目录
9. vendor目录:主要是存放第三方的类库文件,laravel 思想主要是共同的开发,不要重复的造轮子(例如,里面可能存在验证码类,上传类,邮件类),该目录还存放laravel框架的源码。注意如果要使用composer软件管理的,composer 下载的类库都是存放在该目录下面的。
10. .env文件:主要是设置一些系统相关的环境配置文件信息。config 目录里面的文件配置内容一般都是读取该文件 里面的配置信息(config 里面的配置项的值基本都是来自.env文件)。
11. artisan脚手架文件,主要用于生成代码的(自动生成),比如生成控制器,模型文件等。
#php artisan 需要执行的指令
要求1:php必须添加环境变量
要求2:artisan必须存放在命令行当前的工作路径下
artisan就是一个php文件,可以用编辑器打开看看
12. composer.json依赖包配置文件
声明当前需要的软件依赖,但是不能删除,composer需要使用。
启动方式
方式一:命令方式
#php artisan serve
这种启动方式后,如果修改了项目的配置.env文件的话,则需要重新启动才会生效。
方式二:apache方式
虚拟主机配置:(虚拟主机 != 虚拟机)
apache开启vhost
修改apache的虚拟主机配置文件vhost文件
<VirtualHost *:80>
#配置站点管理员的邮箱,当站点产生500错误的时候会显示在页面上
ServerAdmin 1010101010@qq.com
#站点的根目录
DocumentRoot "/Applications/XAMPP/htdocs/larDemo/myFirstApp/public"
#站点需要绑定的域名
ServerName www.zd.cn
#服务器的别名的域名
ServerAlias zd.cn
<Directory "/Applications/XAMPP/htdocs/larDemo/myFirstApp/public">
allow from all
AllowOverride all
Options +indexes
</Directory>
#Options -indexes #不允许访问目录结构,部署的时候要这样
</VirtualHost>
修改hosts文件(线上叫DNS域名解析)
windows命令查看hosts文件 #drivers
在etc目录中
Mac这里使用 Gas Mask
Apache配置虚拟主机,关于403问题的解决
出现这个问题的原因是目录访问权限没有设置
具体解决步骤如下:
1 打开apache配置文件httpd.conf, 找到目录权限的语句
<Directory />
Options FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
</Directory>
2 将以上语句复制到配置虚拟主机的文件中,具体如下:
<VirtualHost *:80>
#配置站点管理员的邮箱,当站点产生500错误的时候会显示在页面上
ServerAdmin 1010101010@qq.com
#站点的根目录
DocumentRoot "/Applications/XAMPP/htdocs/larDemo/myFirstApp/public"
#站点需要绑定的域名
ServerName www.zd.cn
#服务器的别名的域名
ServerAlias zd.cn
<Directory "/Applications/XAMPP/htdocs/larDemo/myFirstApp/public">
Options FollowSymLinks
AllowOverride All
Order deny,allow
Require all granted
</Directory>
</VirtualHost>
还有一个步骤给storage权限
chmod -R 777 storage
Laravel入门使用(路由)
什么是路由:将用户的请求按照事先规划的方案提交给指定的控制器或者功能函数来进行处理. 【通俗的讲,路由就是访问地址形式】
1 路由配置文件
routes/web.php
2 routes/web.php配置文件中配置路由(重点)
Route::请求方式('请求的URL' , 匿名函数 或 控制响应的方法)
比如请求域名下根目录
Roue::get('/',function(){return 'hello world.'})
函数的返回值,就是请求的响应。
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请求:
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('ff', function () {
//
});
Get表示支持get请求方式的路由;
Post表示支持post请求方式的路由;
Match表示匹配固定(自己定义)的请求方式的路由;
Any表示匹配任意请求方式的路由;
语法上match比get/post/any多一个参数:
Route::match(匹配的请求类型,地址,回调);
匹配请求类型要求是数组格式的声明。
3 路由参数
参数分为必选参数和可选参数
必选参数:“{参数名}”
可选参数:“{参数名?}”
#必选参数
Route::any('test1/{id}', function ($id) {
echo "当前的用户id是" . $id;
});
#可选参数
Route::any('test2/{id?}', function ($id = '') {
echo "当前的用户id是" . $id;
});
#通过?形式传递get参数
Route::any('/test3', function () { # zd.cn/test3?id=123
echo "当前的用户id是" . $_GET['id'];
});
4 路由别名
路由别名相当于在路由定义的时候,为路由起了一个别名,在以后的程序中可以通过这个别名来获取路由的信息。
#路由别名
Route::any('/test4/asdasdsad/adsadsa', function () { # zd.cn/test3?id=123
echo "当前的用户id是" . $_GET['id'];
})->name('名字');
调用该路由则可以写成:route('名字');
查看系统已经有的路由命令:#php artisan route:list
5 路由群组(理解)
比如后台有如下路由
/admin/login
/admin/logout
/admin/index
/admin/user/add
/admin/user/del
他们的共同点是,都有/admin/前缀,为了管理方便,可以把他们放到一个路由分组中。使用prefix属性指定路由前缀。
Route::group(['prefix' => 'admin'], function () {
Route::get('test1', function () {
//匹配URL "/admin/test1"
echo 'test1';
});
Route::get('test2', function () {
//匹配URL "/admin/test2"
echo 'test2';
});
});
语法: Route::group(公共属性数组 , 回调函数);
后期还会接触到middleware属性。
控制器
1 控制器文件在哪?
app/Http/Controllers
2 控制器文件如何命名?
大驼峰的控制器名+Controller.php
3 结构代码如何书写?
注意:其控制器基础结构代码,不需要自己去手动编写,可以通过artisan命令行来自动生成。
因此需要记住对应的命令: #php artisan make:controller 控制器名(大驼峰)Controller 关键词
例如:使用artisan命令创建TestController.php文件
#php artisan make:controller TestController
4 控制器路由
即,如何使用路由规则调用控制器下的方法,而不再走回调函数。
路由设置格式基本相同,只是将匿名函数换成“控制器类名@方法名”
旧的格式如下:Route::请求方法(路由表达式,控制器@方法)
laravel8格式:Route::get(路由表达式 , [控制器::class, '方法']);
假设调用控制器TestController的start方法
Route::get("/test/t1", [TestController::class, 'start']);
5 控制器分目录管理
1 建立相关的区分目录
2 创建控制器文件
php artisan make:controller Admin/IndexController
php artisan make:controller Home/IndexController
3 编写测试代码
public function index()
{
echo '这是Admin分组下的index方法';
}
4 编写对应路由
Route::get("/admin/index", [App\Http\Controllers\Admin\IndexController::class, 'index']);
Route::get("/home/index", [App\Http\Controllers\Home\IndexController::class, 'index']);
接收用户输入
Laravel8好像抛弃了Input类,这里使用Request类
接收用户输入的类: Illuminate\Support\Facades\Request
Facades:“门面”的思想。门面是介于一个类的实例化与没有实例化中间的一个状态。其实是类的一个接口实现。在这个状态下可以不实例化类但是可以调用类中的方法。说白了就是静态方法。
Request::input('参数的名字','如果参数没有被传递使用该默认值')
Request::all():获取所有的用户的输入,返回数组
Request::input('name'):获取单个的用户的输入
Request::only(['id','name']):获取指定的几个值
Request::except(['id']):获取除了指定的指,之外的指
Request::has('name'):判断某个值存在与否(返回boolean)上述方法既可以获取get中的信息,也可以获取post中信息。
在laravel中,如果需要使用facades的话,但是又不想写那么长的引用操作:
use Illuminate\Support\Facades\Request
则可以在config/app.php中定义长串的别名(在aliases数组中定义别名):
'aliases' => [
'Request' => Illuminate\Support\Facades\Request::class,
]
laravel中友好输出函数:dd()
作用:dump+die,后续的代码不会执行