laravel5.8(一)结构,路由等基本知识
一:下载安装:
我本机项目在E:\www,,进入该目录,用composer来安装
composer create-project --prefer-dist laravel/laravel=5.8 test这样就项目就安装好了
二:文件结构:
app目录 | Console目录 | 命令行接口名称,基于强大的Symfony Console 组件驱动,artisan命令,控制器,模型,中间件等都可以通过命令生成。 | |
Exceptions目录 | 异常处理类 | ||
Http目录 | 控制器,Middleware:中间件等 | ||
Providers | 服务提供者,其实就是注册一些东西,包括注册 Service Container,事件监听器,过滤器,甚至是路由等 | ||
User.php | 这个是官方的一个默认模型,也可以新建模型目录 | ||
bootstrap目录 | app.php | 用于框架启动自动载入配置文件 | |
cache | 包括一些缓存文件,提升性能 | ||
config目录 | 应用的所有配置文件 | ||
database 目录 | 数据库迁移和填充文件 | ||
public 目录 | 包括入口文件index.php,和静态资源文件,nginx、apache指向这里 | ||
resources 目录 | 目录包含了视图和未编译的资源文件(如 LESS、SASS 或 JavaScript)。以及语言文件 | ||
routes 目录 | web.php | 提供会话状态、CSRF 防护和 cookie 加密 | |
api.php | api接口路由,频率限制,令牌认证等 | ||
channels.php | 广播路由 | ||
console.php | 以闭包的形式自定义 artisan 命令 | ||
storage 目录 | app | 存储应用生成的任何文件 | |
framework | 存储框架生成的文件和缓存 | ||
logs | 包含应用的日志文件 | ||
app/public | 存储用户生成的文件,比如上传的图片等 | ||
tests目录 | 自动化测试 | ||
vendor | 所有的依赖文件,laravel框架核心代码也在这里 | ||
.env | 配置文件,包括数据库配置,reids配置,环境配置等 | ||
.env.example | 和上面一样,类似于php.ini-production改成php.ini | ||
artisan | 命令行生成工具 | ||
composer.json | composer的配置文件,声明包,以及之间的关系,也可以引入自定义的包 |
三:路由
注意:请求根目录/ (http://www.xxx.com/public/),会请求public/index.php,请求其他路由地址时,会把你的请求定位到:http://www.xxx.com/index.php 里面,故而报404,所以nginx需要添加一行:
location / { try_files $uri $uri/ /index.php?$query_string; }
或者
把 try_files $uri $uri/ /index.php?$query_string; 添加到/public/nginx.htaccess中,然后nginx中include加载
1:默认路由,位置:routes/web.php
Route::get('/', function () { return view('welcome'); //view调用视图,resources\views\welcome.blade.php });
一般应用都是使用该路由文件,基本路由:URL+闭包,大部分路由一般是找控制器:
Route::get('/user', 'UserController@index');//控制器和方法用@分割
2:请求方式:
Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback);3:多个请求方式
Route::match(['get', 'post'], '/', function () { // get和post请求 }); Route::any('foo', function () { // 所有请求方式 });
4:路由参数
Route::get('user/{id}', function ($id) { return $id; //回调获取id参数 });
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { //多个参数 });
路由的参数通常都会被放在 {} 内,并且参数名只能为字母,同时路由参数不能包含 - 符号,如果需要可以用下划线 (_) 代替。路由参数会按顺序依次被注入到路由回调或者控制器中,而不受回调或者控制器的参数名称的影响。
5:可选参数,用?标记
Route::get('user/{name?}', function ($name = 'John') { name是可选的,回调这里,如果没有name,那么默认John return $name; });
6:视图路由
Route::view('/welcome', 'welcome', ['name' => 'Taylor']); //第一个参数是访问的URL,第二个参数是视图名称路径,第三个参数传入数据,非必填7:正则表达式路由,不建议使用,可以在程序中去判断。
8:重定向路由
Route::redirect('/here', '/welcome2',301); //第一个参数路由URL,第二个参数重定向URL,第三个参数如果没有,默认返回302
9:路由别名,加name方法
Route::get('user/{name?}', function ($name = 'John') { return $name; })->name('users');
10:路由分组:Route::group,语法:加一个前缀:prefix
Route::group(['prefix' => 'admin'], function () { //定义后台路由分组admin,里面写法和上面一样。 Route::get('edit', function () { return $name; }); Route::get('add', function () { return $name; }); });
11:路由中间件:Route::group,语法:加一个前缀:middleware,这东西一般用于验证,有没有登录啊,权限啊这些。
Route::group(['middleware' => 'auth'], function (){ Route::get('/user', function (){ }); Route::get('/user/profile', function (){ }); });