laravel路由_laravel路由访问404 - CSDN
精华内容
参与话题
  • laravel路由

    千次阅读 2019-07-27 10:40:29
    在使用laravel前必须先定义路由,然后才能在浏览器中访问。routes文件夹中还有一个api.php,用于定义api路径。 最简单的路由: Route::get('/',function(){ return 'hello,world!' ; }); 此时在浏览器中,输入...

    路由

    在laravel中,定义路由的地方在routes/web.php文件中。在使用laravel前必须先定义路由,然后才能在浏览器中访问。routes文件夹中还有一个api.php,用于定义api路径。

    最简单的路由:

    Route::get('/',function(){
       return 'hello,world!' ;
    });
    

    此时在浏览器中,输入localhost,就可以看到输出的字符串。

    使用MVC模式时,我们一般先定义路由,然后在路由中访问控制器中的方法,控制器中的方法返回响应的视图,此时我们可以定义路由,如下:

    Route::get('/','IndexController@index');
    

    其中IndexController是控制器类,index是控制器类中的方法,index方法中可以定义返回的视图。

    路由动作

    上面Route::get语法只能处理get请求,laravel定义了其他请求路由的方法:

    Route::post('/',function(){});
    Route::put('/',function(){});
    Route::delete('/',function(){});
    

    还可以使用通用方法(不推荐使用):

    Route::any('/',function(){});
    

    我们还可以通过Route::match定义几种特定请求方法:

    Route::match(['get','post'],'/',function(){});
    

    路由参数

    在laravel中还可以定义路由参数:

    Route::get('post/{id}',function($id){
        return "文章ID: ".$id;
    });
    

    此时,通过localhost/post/100,就可以访问id=100的文章。还可以定义可选路由参数:

    Route::get('post/{id?}',function($id=1){
        return "文章ID: ".$id;
    });
    

    如果访问localhost/post/就会返回id=1的文章

    还可以为路由参数指定正则表达式,约束路由参数范围:

    //id只能是数字
    Route::get('page/{id}', function ($id) {
        return '页面ID: ' . $id;
    })->where('id', '[0-9]+');
    
    //name只能是大小写字母
    Route::get('page/{name}', function ($name) {
        return '页面名称: ' . $name;
    })->where('name', '[A-Za-z]+');
    
    //定义多个路由参数约束规则
    Route::get('page/{id}/{slug}', function ($id, $slug) {
        return $id . ':' . $slug;
    })->where(['id' => '[0-9]+', 'slug' => '[A-Za-z]+']);
    

    路由命名

    为路由起名,主要是为了在控制器或者视图类中引用。路由命名示例如下:

    Route::get('user/{id?}', function ($id = 1) {
        return "用户ID: " . $id;
    })->name('user.profile');
    

    此时在视图中,就可以使用命名路由:

    <a href="{{ route('user.profile', ['id' => 100]) }}">
    // 输出:http://blog.test/user/100
    

    路由分组

    在网络应用程序中,我们可以给路由分组,比如前后台分组,还可以根据其他特征,比如路由前缀、子域名、控制器命名空间、是否使用相同的中间件等。
    定义路由分组,主要是为了让代码可读性更好,便于维护。

    根据命名空间分组

    //前台路由组
    Route::group(['namespace' => 'Home'], function(){
        // 控制器在 "App\Http\Controllers\Home" 命名空间下
        Route::get('/', 'IndexController@index');
    });
    
    //后台路由组
    Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function(){
        // 控制器在 "App\Http\Controllers\Admin" 命名空间下
        Route::get('/', 'AdminController@index');
    });
    
    // 或者用另外一种写法:
    Route::namespace('Admin')->prefix('admin')->group(function() {
         // App\Http\Controllers\Admin\AdminController
         Route::get('/', 'AdminController@index');
    });
    

    此时访问 domain(你的域名)即可访问前台,domain/admin 即可访问admin后台

    中间件

    中间件是对请求的一种过滤或重定向功能,比如认证中间件,只有通过认证才能通过某些路由访问相应的功能。不同的路由可以通过相同的中间件进行分组:

    Route::middleware('auth')->group(function () {
        Route::get('dashboard', function () {
            return view('dashboard');
        });
        Route::get('account', function () {
            return view('account');
        });
    });
    

    上面使用dashboard,account两个路由时,必须通过认证。

    路由路径前缀

    某些路由可以定义相同的前缀便于区分功能,可以使用Route::prefix对路由进行分组:

    Route::prefix('api')->group(function () {
        Route::get('/', function () {
            // 处理 /api 路由
        })->name('api.index');
        Route::get('users', function () {
            // 处理 /api/users 路由
        })->name('api.users');
    });
    

    子域名路由

    在laravel中,可以为不同的应用子系统设置不同的子域名,这时可以通过设置子域名路由访问不同的子系统:

    Route::domain('test.blog.com')->group(function () {
        Route::get('/', function () {
            // 处理 http://test.blog.com 路由
        });
    });
    

    还可以通过参数方式设置子域名,适用于网站拥有多租户的场景,比如建站系统,多家公司通过定义二级域名访问自己的网站。

    Route::domain('{account}.yoursite.com')->group(function () {
        Route::get('/', function ($account) {
            //
        });
        Route::get('user/{id}', function ($account, $id) {
            //
        });
    });
    

    注意:这种情况下,$account永远是所有分组路由的第一个路由参数。

    路由命名前缀

    除了通过上述共同特征对路由进行分组外,对于某一类资源路由,比如用户,往往拥有相同的路由命名前缀,如 user.,我们还可以基于这一特征对路由进行分组,使用 Route::name 方法即可实现:

    // 路由命名+路径前缀
    Route::name('user.')->prefix('user')->group(function () {
        Route::get('{id?}', function ($id = 1) {
            // 处理 /user/{id} 路由,路由命名为 user.show
            return route('user.show');
        })->name('show');
        Route::get('posts', function () {
            // 处理 /user/posts 路由,路由命名为 user.posts
        })->name('posts');
    });
    
    展开全文
  • Laravel 路由中间件Laravel 中间件,是进入应用之前的一层过滤.也可以设置为运行之后在启用中间件.运行Artisan 命令 make:middleware 创建中间件:php artisan make:middleware CheckAge中间件创建完成后还需要注册...

    Laravel 路由中间件

    Laravel 中间件,是进入应用之前的一层过滤.也可以设置为运行之后在启用中间件.

    运行Artisan 命令  make:middleware  创建中间件:

    php artisan make:middleware CheckAge

    中间件创建完成后还需要注册中间件.

    全局中间件:

    所有的路由都会生效

    在 app/Http/Kernel.php 中的 $middleware 数组中添加即可 例如:

    // 在 App\Http\Kernel 类中
    
    protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];

    中间件组

    定义一组中间件,使分配到的路由同时对这一组的中间件都生效,laravel中默认加载web的中间件组例如:

    /**
     * 应用程序的路由中间件组
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    
        'api' => [
            'throttle:60,1',
            'auth:api',
        ],
    ];


    路由中间件

    定义单个的中间件,在需要使用的路由单独加载,

    /**
         * The application's route middleware.
         *
         * These middleware may be assigned to groups or used individually.
         *
         * @var array
         */
        protected $routeMiddleware = [
            'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
            'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
            'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
            'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
            'can' => \Illuminate\Auth\Middleware\Authorize::class,
            'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
            'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
            'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
            'admin.login' => \App\Http\Middleware\AdminLogin::class,
            'admin.auth' => \App\Http\Middleware\AdminAuth::class,
            'home.auth' => \App\Http\Middleware\HomeAuth::class,
        ];


    中间件参数

    中间件也可以接受额外的参数

     /**
         * 处理传入的请求
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @param  string  $role
         * @return mixed
         */
        public function handle($request, Closure $next, $role)
        {
            if (! $request->user()->hasRole($role)) {
                // 重定向...
            }
    
            return $next($request);
        }

    定义路由时通过一个 : 来隔开中间件名称和参数来指定中间件参数。多个参数就使用逗号分隔:

    Route::put('post/{id}', function ($id) {
        //
    })->middleware('role:editor');

    展开全文
  • laravel路由操作方法

    2019-05-16 16:42:18
    简单路由操作: 1、 利用匿名函数直接...上述路由会返回一个具有hello,world的页面(Laravel 会通过内置的响应栈和中间件对返回内容进行处理。) 2、 路由参数以及限定(where) Route::get('page/{name}', fun...

    简单路由操作:


    1、 利用匿名函数直接操作相关路由

    Route::get('/', function () { 
        return 'Hello, World!'; 
    });
    上述路由会返回一个具有hello,world的页面(Laravel 会通过内置的响应栈和中间件对返回内容进行处理。)
    

    2、 路由参数以及限定(where)

    Route::get('page/{name}', function ($name) {
        return '页面名称: ' . $name;
    })->where('name', '[A-Za-z]+');
    

    利用{参数名}提取url中的参数,也可以使用where对参数进行过滤不符合规则的则返回404页面

    3、 利用路由命名方式对路由的名称加以修改

    Route::get('user/{id?}', function ($id = 1) {
        return "用户ID: " . $id;
    })->name('user.profile');
    

    这样访问user.profile就是访问user这个路由
    前端视图模板中可以通过辅助函数 route 并传入路由名称(如果有路由参数,则以数组方式作为第二个参数传入)来引用该路由:

    <a href="{{ route('user.profile', ['id' => 100]) }}">
    // 输出:http://blog.test/user/100
    

    4、 利用路由分组为路由分类,主要使用在路由具有相同的中间件
    路由可以直接使用中间,但是如果有多个路由使用同一个中间件还使用下列方法的话不仅不美观而且可读性差

    Route::get('/', function () {
        //
    })->middleware('token', 'auth');
    

    所以利用路由分组,实例如下:

    Route::group(['middleware' => 'auth'], function () { 
        Route::get('dashboard', function () { 
            return view('dashboard'); 
        }); 
        Route::get('account', function () { 
            return view('account'); 
        }); 
    });
    

    5、 相对复杂的路由可以利用以下:

    Route::get('/task', 'TaskController@home');
    

    以get的方式通过路由访问TaskController的home方法

    6、 资源路由:

    HTTP请求方式 URL 控制器方法 路由命名 业务逻辑描述
    GET post index() post.index 展示所有文章
    GET post/create create() post.create 发布文章表单页面
    POST post store() post.store 获取表单提交数据并保存新文章
    GET post/{post} show() post.show 展示单个文章
    GET post/{id}/edit edit() post.edit 编辑文章表单页面
    PUT post/{id} update() post.update 获取编辑表单输入并更新文章
    DELETE post/{id} destroy() post.desc 删除单个文章

    简单理解就是通过强化一个控制器通过上面的表格对资源进行控制。已经了解了 Laravel 中对资源路由的命名约定,Laravel 还为我们提供了一个 Route::resource 方法用于一次注册包含上面列出的所有路由,并且遵循上述所有约定:

    Route::resource('post', 'PostController');
    

    就是把上述表格中的各个方式通过resource“封装”一下。

    7、 路由模型绑定(就是把路由和特定的模型进行绑定当路由传回参数时直接调用模型进行查询而不用再在后台进行复杂的代码操作)

    Route::get('task/{task}', function (\App\Models\Task $task) {
        dd($task); // 打印 $task 明细
    });
    

    通过上述的路由设置可以直接从路由得到task参数然后直接传送给模型查询然后直接返回实例

    8、 兜底路由(就是处理未定义路由,替代404页面)

    Route::fallback(function () {
        return '我是最后的屏障';
    });
    

    9、 频率限制(一个是在某些需要验证/认证的页面限制用户失败尝试次数,提高系统的安全性,另一个是避免非正常用户(比如爬虫)对路由的过度频繁访问)

    Route::middleware('throttle:60,1')->group(function () {
        Route::get('/user', function () {
            //
        });
    });
    

    利用上述的中间件完成操作60表示频率,1表示每1分钟。

    展开全文
  • laravel-路由大集合

    2019-06-21 13:49:05
    Route::get(’/’, function () { return view(‘welcome’); }); /* response .../ Route::get(‘hello’,function (){ return response([“1”,1],201)->header(‘content-type’,‘text/plain’);...

    Route::get(’/’, function () {
    return view(‘welcome’);
    });
    /*

    • response
    • text/html text/plain
      /
      Route::get(‘hello’,function (){
      return response([“1”,1],201)->header(‘content-type’,‘text/plain’);
      });
      /
    • 文件下载
      //
      Route::get(‘h1’,function (){
      return response()->download(“index.php”,‘my.php’);
      });
      /
    • 路由跳转到外部
      //
      Route::get(‘h2’,function (){
      return redirect(“http://www.baidu.com”);
      });
      Route::get(‘h3’,function (){
      return redirect(“login”);
      });
      /
    • 路由跳转到内部
      *//
      Route::get(‘test’,“Test\TestController@index”);
      Route::post(‘t1’,“Test\TestController@t1”);

    /*

    • 正则
      *//
      Route::get(“t2/{n}/{p}/{w?}”,function (n,n,p){
      return ‘n:’.n.&quot;p:&quot;.n.&quot;-p:&quot;.p;
      })->where(
      [
      ‘n’=>’\d+’,
      ‘p’=>’[a-z]+’,
      ‘w’=>’(\w+.html)|(\w+)’
      ]
      );
      Route::match([‘get’,‘post’],‘login’,“Admin\LoginController@login”)->name(‘login’);
      Route::group([‘prefix’=>‘t’],function (){
      Route::get(‘t1’,function (){
      return array(1,2,3,4,5);
      });
      });
      Route::group([‘prefix’=>‘s’,‘middleware’=>‘auth’,‘namespace’=>‘aa’],function (){
      Route::get(‘s1’,function (){
      return ‘auth.s’;
      });
      });

    /*

    • 资源型
    • artisan make:controller Admin\UserController --resource
      */
      //Route::namespace(“Admin”)->resource(“u”,“UserController”);
      Route::group([‘namespace’=>“Admin”,“prefix”=>“admin”],function (){
      Route::middleware(“auth”)->resource(“u”,“UserController”)->only([‘index’]);
      Route::middleware(“auth”)->resource(“u”,“UserController”)->except([‘show’]);
      });

    /*

    • api型php artisan make:controller Admin/ApiController --api
      */
      Route::group([‘namespace’=>“Admin”,“prefix”=>“i”],function (){
      Route::apiResources([“a”=>“ApiController”]);
      });
    展开全文
  • laravel路由解析全解

    千次阅读 2018-12-28 09:45:19
    今天来详细的跟大家分享laravel框架中的路由到底是如何解析的~ 第一步,我想先让大家知道路由原本的样子和解析后的样子 原:Route::get('/home', 'HomeController@index')-&gt;name('home'); 解析后:app\...
  • Laravel入门

    万次阅读 2017-03-28 08:47:36
    一、laravel简介及安装 1.简介:Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力...
  • Laravel 路由

    2017-04-15 10:22:59
    基础路由 路由定义文件 /*app/Http/routes.php 被 App\Providers\RouteServiceProvider 加载 */ Route::get('/', function () { return 'Hello World';}); 定义多个路由动词 动词包括 get post put ...
  • laravel路由参数 Today we'll be looking at more of Laravel's routing features. This time we'll be dealing with how Laravel handles route parameters. We've gone over Laravel routing before, but this ...
  • Laravel路由

    2018-03-07 19:55:53
    写在:routes文件下的web.php原本是欢迎页面的路由Route::get('/', function () { return view('welcome'); });Route类的静态方法get(也可以改成post)'/'代表访问的URL路径,回调函数,表示做的实际操作,这里是...
  • laravel路由别名

    千次阅读 2017-11-08 15:46:08
    在阅读laravel文档中发现从5.4开始的文档中,在介绍命名路由部分,只介绍了,在路由定义之后使用 name 方法链的方式来定义该路由的名称。但是在实际操作中其实还可以使用as方法链进行定义,此方法在5.3及以前的文档...
  • Laravel 路由分发

    2019-06-17 19:13:16
    想让laravel 走不同的路由文件可以在 /app/Http/Kernel.php 进行配置,代码如下 /** * The application's route middleware groups. * * @var array */ protected $middlewareGroups = [ 'web' =>...
  • Laravel 路由传参

    2020-03-11 17:44:03
    传参格式 : 必填 {b} 非必填{b?} //必填参数 Route::get('aa/{b}',function ($b){ return $b; }); //可选参数(可填可不填) Route::get('aa/{b?}',function ($b){ ...Route::get('aa/{b}',function ...
  • Laravel路由配置未生效

    千次阅读 2018-10-11 23:01:51
    使用laravel框架,做了一个简单的demo,在一个新建的Controller中写一个index方法并建立对应路由及视图。如图 现象描述 访问 http://laravel-demo:84/index.php laravel欢迎界面正常 访问 ...
  • laravel路由参数

    千次阅读 2019-01-07 18:15:54
    页面上需要跳转,跳转的时候需要传参,有以下两种方式传参:1、url方法:代码:&amp;amp;lt;a href=&amp;amp;quot;{{ url('student.teacher_detail',['teacher_info_id'=&amp;...$data['teacherId'],'foo'=...
  • laravel 路由失败

    2017-08-23 11:10:08
    laravel 5.4 Route::group(['prefix' => 'posts'],function(){ Route::get('/','PostController@index'); Route::put('/delete','PostController@delete'); Route::get('/{post}','PostController@show'
  • 深入浅出 Laravel 路由执行原理

    千次阅读 2018-07-13 12:15:10
    本文首发于「深入浅出 Laravel 路由执行原理」,转载请注明出处。这篇文章我们将学习 Laravel 项目中一个很重要的主题 --「路由」。可以说几乎所有的框架都会涉及到「路由」的处理,简单一点讲就将用户请求的 url ...
  • laravel路由自动加载

    2020-04-08 14:16:49
    laravel路由自动加载 laravel 自带的路由文件有四个 api.php 文件存放 api 路由,会自动加载api前缀和一些中间件。 channels.php 文件用于注册应用支持的所有事件广播频道。 console.php 文件用于定义所有基于闭包...
  • laravel路由无效

    2019-08-13 17:40:03
    发生了只有根目录能访问,路由访问不了,记录一下解决过程中做了的事,apache开启rewrite模块、apache配置文件AllowOverride None换成AllowOverride All
  • laravel 路由分组

    2018-10-09 14:43:21
    普通写法  Route::post('login/login',"SchoolApi\LoginController@login"); // 登录 分组写法  Route::group(['prefix'=&gt;'CloudApi','namespace'=&gt;'CloudApi'],function()...'V1','...
  • laravel路由和路由组

    2017-02-27 13:56:40
    上一部分讲述了laravel路由的基本用法,现在我们要了解更多路由上的内容。 本文包含以下小节,在阅读之前建议大致阅读官方文档相关部分。 中间件路由组 中间件# 在官方文档上,这一部分是在路由的后面,...
1 2 3 4 5 ... 20
收藏数 11,575
精华内容 4,630
关键字:

laravel路由