在laravel框架中,如何访问指定控制器中的信息内,在laravel框架中如果你想要访问指定的控制器内的方法时,你需要进行路由注册,只有进行过路由注册的地址才能够访问,不然的话会显示404,那么如何进行路由注册呢,下面的内容就是如何进行路由注册一级路由注册的规则

所有的 Laravel 路由都在 routes 目录中的路由文件中定义,这些文件都由框架自动加载。routes/web.php 文件用于定义 web 界面的路由。这里面的路由都会被分配给 web 中间件组,它提供了会话状态和 CSRF 保护等功能。定义在 routes/api.php 中的路由都是无状态的,并且被分配了 api 中间件组

这里我的域名为:local.test.com

一:可用的路由注册方法:

Route::get($uri, $callback);  #get请求路由
Route::post($uri, $callback); #post请求路由
Route::put($uri, $callback);  #put请求路由
Route::patch($uri, $callback);#patch请求路由
Route::delete($uri, $callback);#delete请求路由
Route::options($uri, $callback);#options请求路由
Route::match(['get', 'post'], $uri,$callback);#多种请求路由
Route::any($uri, $callback);#所有请求路由

指向 web 路由文件中定义的 POST、PUT 或 DELETE 路由的任何 HTML 表单都应该包含一个 CSRF 令牌字段,否则,这个请求将会被拒绝

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

二:基本路由注册方法

1:路由直接输出

在routes/web.php文件中添加:

Route::get('test', function () {
    return 'Hello World';
});

在浏览器上输入local.test.com/test时浏览器上输出的是Hello World

2:路由访问控制器

在routes/web.php文件中添加:

Route::get('test', 'TestController@index');

然后在app/Http/Controllers目录下新建一个TestController.php文件

<?php
namespace App\Http\Controllers;
use Illuminate\Routing\Controller as BaseController;
class TestController extends BaseController {
    public function index() {
        return '11';
    }
}

在浏览器上输入local.test.com/test时浏览器上输出的是11

3:重定向路由

在routes/web.php文件中添加:

Route::redirect('/here', '/there', 301);

表示的是浏览器访问local.test.com/here就会重定向到local.test.com/there

4:视图路由

在routes/web.php文件中添加:

Route::view('/test', 'test');

上述代码表示的是不经过控制器直接渲染视图文件test.php,在resources/views目录下新建一个test.php文件,里面写上html代码,然后在浏览器访问local.test.com/test是显示的就是test.php内的html代码内容

还可以像视图文件传递参数,例:

Route::view('/test', 'test',['name' => 'nihao']);

在html中使用<?= $name?>使用传递来的参数

5:路由参数

在routes/web.php文件中添加:

Route::get('test/{id}', function ($id) {
    return $id;
});

在浏览器上输入local.test.com/test/10,这时候浏览器上显示的是10

你还可以对传递的参数进行校验

Route::get('test/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

上述的检测是id参数必须是数字,如果这时候你输入的是local.test.com/test/abc,这时候显示的是404,你输入local.test.com/test/1时,正确

如果检测的参数是多个的话,where里的参数是一个数组,例:

Route::get('test/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

6:配置全局约束

修改app/Providers目录下的RouteServiceProvider.php文件的boot方法:

这里我配置所有的id参数必须是数字:

public function boot() {
    Route::pattern('id', '[0-9]+');
    parent::boot();
}

配置完成之后访问有id参数的url是如果id你输入的不是数字,这时候显示的是404

7:命名路由

命令路由简单来说就是给路由起别名

例:

在routes/web.php文件中添加:

Route::get('test/test', 'TestController@test')->name('test');

然后在另一个路由对应的方法中输入

// 生成 URL...
$url = route('test');
// 生成重定向...
return redirect()->route('test');

8:中间件配置约束

(1):创建一个中间件

使用命令行在项目目录下输入

php artisan make:middleware CheckAge #Check 表示中间件文件名称

这时候在App/Http/Middleware目录下就会生成一个Check.php文件

修改CheckAge.php 文件:

<?php
namespace App\Http\Middleware;
use Closure;
class Check
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->route()->named('profile')) {
            return redirect('/test');
        }
        return $next($request);
    }
}

(2):注册中间件

在app/Http/Kernel.php文件中的$routeMiddleware变量中添加:

'check' => \App\Http\Middleware\Check::class,

(3):配置中间件约束

在routes/web.php文件中:

Route::middleware(['check'])->group(function () {
    Route::get('/', function () {
        // 使用 check 中间件
    });
    Route::get('/test', function () {
        // 使用 check 中间件
    });
});

Route::middleware(['check'])->group内的所有路由配置都遵循check.php中间件的规则


huaweichenai
673 声望114 粉丝

« 上一篇
laravel 安装
下一篇 »
laravel 中间件