laravel基础知识学习总结(路由、中间件、控制器)

 路由:

  • 路由:是将信息从源地址传递到目的地得角色
  • Route::get('/test',function(){ });   //分号不能丢
  • 报错信息MethodNotAllowedHttpException in RouteController.php 说明当前得请求方式和路由规则不匹配
  • laravel框架中所有得模板文件都是存放在resources/views中
  • 模板文件得后缀名是 .blade.php
  • 错误信息TokenMismatchException in VerifyCsrfToken.php 说明当前得post请求中缺少验证信息.在每一个post表单中需要添加一个token
  • 当前路由规则中的参数名可以和匿名函数或者方法中的参数名,不保持一致.潜规则保持一致

routes.php

 1 <?php
 2 //基本路由
 3 Route::get('/',function(){
 4     return view('welcome');
 5 });
 6 //路由组
 7 Route::group([],function(){
 8     //带参数的路由
 9     Route::get('/user/{id}',function($ids){
10         echo "当前用户的id为".$ids;
11     });
12 
13     //阻止参数的类型
14     Route::get('/goods/{id}',function($id){
15         echo "商品的详情页..当前id为".$id;
16     })->where('id','d+');
17 
18     //多个参数
19     Route::get('/{type}-{id}',function ($type,$id){ //该处的参数一定要传,不然下面无法使用这个参数
20         echo "我的类型是".$type."我的id是".$id;
21     });
22 
23     //路由别名
24     Route::get('Admin/User/index',[
25         'as'=>'bieming',    //as和uses是固定的,不可修改
26         'uses'=>function(){
27             echo route('bieming');  //route是一个函数,通过路由别名来快速创建完整的url
28         }
29     ]);
30 
31     //404页面
32     Route::get('/404',function(){
33     //    -------------------方式1-------------------
34     //    abort(404);
35     //    -------------------方式2-------------------
36         return view('errors.404');
37     });
38 });

 中间件

中间件:过滤请求

  • 创建:php artisan make:middleware TestMiddelware
  • 默认存放目录:apphttpmiddelware中
  • $request是laravel框架对请求报文做的封装

 使用:

  1. 创建中间件
    //创建中间件(文件位置:AppHttpMiddleware)
     php artisan  make:middleware LoginMiddleware
  2. 注册
    //注册分为全局注册和路由注册(位置:AppHttpKernel.php)
    //    设置全局注册
        protected $middleware = [
            AppHttpMiddlewareTestMiddelware::class,     //该句打印出来的是TestMiddelware的路径(AppHttpMiddlewareTestMiddelware)
        ];
    
    //    设置路由注册
        protected $routeMiddleware = [
            'login'=>AppHttpMiddlewareLoginMiddleware::class,
        ];
  3. 使用(全局注册不需要该步,因为全局注册是针对所有的请求
    <?php
    //方式1
        Route::get('/setting',[
            'middleware'=>'login',
            'uses'=>function(){
            echo "这是设置页面。。。。";
            }
        ]);
    //方式2
        Route::get('/admin',function(){
            echo "这是网站的后台";
        })->middleware('login');
    }); 

 示例代码:

AppHttpkernel.php

 1 <?php
 2 
 3 namespace AppHttp;
 4 
 5 use IlluminateFoundationHttpKernel as HttpKernel;
 6 
 7 class Kernel extends HttpKernel
 8 {
 9     /**
10      * The application's global HTTP middleware stack.
11      *
12      * @var array
13      */
14 //    设置全局注册
15     protected $middleware = [
16         IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
17         AppHttpMiddlewareEncryptCookies::class,
18         IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
19         IlluminateSessionMiddlewareStartSession::class,
20         IlluminateViewMiddlewareShareErrorsFromSession::class,
21         AppHttpMiddlewareVerifyCsrfToken::class,
22         AppHttpMiddlewareTestMiddelware::class,     //该句打印出来的是TestMiddelware的路径(AppHttpMiddlewareTestMiddelware)
23     ];
24 
25     /**
26      * The application's route middleware.
27      *
28      * @var array
29      */
30 //    设置路由注册
31     protected $routeMiddleware = [
32         'auth' => AppHttpMiddlewareAuthenticate::class,
33         'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
34         'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
35         'login'=>AppHttpMiddlewareLoginMiddleware::class,
36     ];
37 }
View Code

appHttpMiddlewareTestMiddelware.php

 1 <?php
 2 
 3 namespace AppHttpMiddleware;
 4 
 5 use Closure;
 6 
 7 class TestMiddelware
 8 {
 9     /**
10      * Handle an incoming request.
11      *
12      * @param  IlluminateHttpRequest  $request
13      * @param  Closure  $next
14      * @return mixed
15      */
16     public function handle($request, Closure $next)
17     {
18 //       记录该请求的路径
19 //        [2018-08-08 08:08:08]127.0.0.1-------/Admin/User/index
20         $path='['.date('Y-m-d H:i:s') .']'.$request->ip().'-------'.$request->path();
21 //        将字符串路径存放到日志中
22         file_put_contents('request.log',$path."
",FILE_APPEND);
23 //        进入下一层的代码执行
24         return $next($request);
25     }
26 }
View Code

appHttpMiddlewareLoginMiddleware.php

 1 <?php
 2 
 3 namespace AppHttpMiddleware;
 4 
 5 use Closure;
 6 
 7 class LoginMiddleware
 8 {
 9     /**
10      * Handle an incoming request.
11      *
12      * @param  IlluminateHttpRequest  $request
13      * @param  Closure  $next
14      * @return mixed
15      */
16     public function handle($request, Closure $next)
17     {
18 //        检测请求是否具有session信息
19         if (!session('uid')) {
20             //跳转
21             return redirect('/login');
22         }
23         return $next($request);
24     }
25 }
View Code

route.php

 1 <?php
 2     Route::get('/setting',[
 3         'middleware'=>'login',
 4         'uses'=>function(){
 5         echo "这是设置页面。。。。";
 6         }
 7     ]);
 8     Route::get('/session',function(){
 9         session(['uid'=>10]);
10     });
11     Route::get('/login',function(){
12         echo "这里是用户的登陆页面";
13     });
14     //网站后台
15     Route::get('/admin',function(){
16         echo "这是网站的后台";
17     })->middleware('login');
18 });
View Code

 控制器

  •  概念:控制model和view
  • 创建控制器
    //方式1
    php artisan   make:controller UserController
    //方式2.创建一个空控制器
    php artisan   make:controller TestController --plain(不创建类方法) 

资源控制器的访问规则:

Verb    Path                        Action  Route Name
GET     /users                      index   users.index
GET     /users/create               create  users.create
POST    /users                      store   users.store
GET     /users/{user}               show    users.show
GET     /users/{user}/edit          edit    users.edit
PUT     /users/{user}               update  users.update
DELETE  /users/{user}               destroy users.destroy

隐式控制器和资源控制器示例代码:

route.php

<?php
    //隐式控制器
    Route::controller('cmftest','TestController');
    //资源控制器
    Route::resource('user','UserController');
});

TestController.php

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

use AppHttpRequests;
use AppHttpControllersController;

class TestController extends Controller
{
//    函数名称必须为”method+访问名称“
//    访问名称的第一次字母大写
//    访问地址:localhost:10/cmftest/test
    public function getTest()
    {
        return "这是test函数";
    }
}

UserController.php

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;

use AppHttpRequests;
use AppHttpControllersController;

class UserController extends Controller
{
    //访问路径:http://localhost:10/user
    public function index()
    {
        echo "index";
    }
    //访问路径:http://localhost:10/user/create
    public function create()
    {
        echo "create";
    }
}

脑图总结: 

脑图地址:http://naotu.baidu.com/file/f7317bc2f0f514db9e996b7705255910?token=b53e299981abe1da

原文地址:https://www.cnblogs.com/8013-cmf/p/9528626.html