当前位置:威尼斯 > 编程 > string类型的路径,1.2 最基本的路由

string类型的路径,1.2 最基本的路由

文章作者:编程 上传时间:2019-09-29

[Laravel] Laravel的基本HTTP路由

 

使用Laravel的基本路由,实现get请求响应,找到文件app/Http/routes.php

1 基本路由

 

1.1 定义路由的文件

app/Http/routes.php

 

1.2 最基本的路由:

Route::get(''index", 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);

 

1.3 一个可以响应多个HTTP动作的路由:

 

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

 

调用Route的静态方法get(),实现get响应,参数:string类型的路径,匿名函数function(){}

2 路由参数

 

2.1 必选参数

Route::get('user/{id}', function ($id) { return 'User '.$id; });

 

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { // });

 

注意: 路由参数不能包含 - 字符。请用下划线 (_) 替换。

 

2.2 可选的路由参数

可以在参数名称后面加上 ? 来实现:

Route::get('user/{name?}', function ($name = null) { return $name; }); Route::get('user/{name?}', function ($name = 'John') { return $name; });

 

2.3 正则表达式限制参数

你可以使用 where 方法来限制路由参数格式。where 方法接受参数的名称和定义参数应该如何被限制的正则表达式: Route::get('user/{id}', function ($id) { // }) ->where('id', '[0-9]+'); Route::get('user/{id}/{name}', function ($id, $name) { // }) ->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

 

2.4 全局限制

所有的路由参数都遵循,则可以使用 pattern 方法。

在 RouteServiceProvider 的 boot 方法里定义这些模式:

/** * 定义你的路由模型绑定,模式过滤器等。 * * @param IlluminateRoutingRouter $router * @return void */ public function boot(Router $router) { $router->pattern('id', '[0-9]+'); parent::boot($router); }

 

匿名函数内部,返回string数据

3 命令路由

命名路由让你可以更方便的为特定路由生成 URL 或进行重定向,如果你在每个视图中生成url时候都使用别名,当某个路由改变时候不必去每个url中更改。

 

3.1 使用 as 数组键

Route::get('user/profile', ['as' => 'profile', function () { // }]);

 

Route::get('user/profile', [ 'as' => 'profile', 'uses' => 'UserController@showProfile' ]);

 

3.2 链式调用 name 方法:

Route::get('user/profile', 'UserController@showProfile')->name('profile');

 

3.3 对命名路由生成 URLs

一旦你在指定的路由中分配了名称,则可通过 route 函数来使用路由名称生成 URLs 或重定向:

$url = route('profile'); $redirect = redirect()->route('profile');

如果路由定义了参数,那么你可以把参数作为第二个参数传递给 route 方法。指定的参数将自动加入到 URL 中:

Route::get('user/{id}/profile', ['as' => 'profile', function ($id) { // }]); $url = route('profile', ['id' => 1]);

 

实现post,put,delete的请求,同上

4 路由群组

 

路由群组允许你共用路由属性,例如:中间件、命名空间,你可以利用路由群组统一为多个路由设置共同属性,而不需在每个路由上都设置一次。共用属性被指定为数组格式,当作 Route::group 方法的第一个参数。

 

4.1 路由前缀

Route::group(['prefix' => 'admin'], function () { Route::get('users', function () { // 符合「/admin/users」URL }); });

你也可以使用 prefix 参数去指定路由群组中共用的参数:

Route::group(['prefix' => 'accounts/{account_id}'], function () { Route::get('detail', function ($account_id) { // 符合 accounts/{account_id}/detail URL }); });

 

4.2 中间件

Route::group(['middleware' => 'auth'], function () { Route::get('/', function () { // 使用 Auth 中间件 }); Route::get('user/profile', function () { // 使用 Auth 中间件 }); });

 

4.3 命名空间

Route::group(['namespace' => 'Admin'], function() { // 控制器在「AppHttpControllers威尼斯,Admin」命名空间 Route::group(['namespace' => 'User'], function() { // 控制器在「AppHttpControllersAdminUser」命名空间 }); });

 

请记住,默认 RouteServiceProvider 会在命名空间群组内导入你的 routes.php 文件,让你不用指定完整的 AppHttpControllers 命名空间前缀就能注册控制器路由。所以,我们只需要指定在基底 AppHttpControllers 根命名空间之后的部分命名空间。

 

实现get传递参数的路由,调用Route的静态方法get(),参数:路径,匿名函数

5 资源路由

 

请求方法 请求URI 对应的控制器方法 代表的意义
GET /admin/article index 索引/列表
GET /admin/article/create create 创建(显示表单)
POST /admin/article store 保存你创建的数据
GET /admin/article/{id} show 显示对应id的内容
GET /admin/article/{id}/edit edit 编辑(显示表单)
PUT/PATCH /admin/article/{id} save 保存你编辑的数据
DELETE /admin/article/{id} destroy 删除

 

1>定义资源路由Route::resource('admin/article', 'ArticleController');。

2>当我使用get方式访问地址

3>当我使用get方式访问地址

4>当我通过POST提交数据至地址

 

使用命令 php artisan route:list 可以查看我们现有的路由,如下截图

威尼斯 1

 威尼斯 2

路径,大括号包裹参数名,不含$,例如:’/user/{id}’

6 控制器路由

注意:laravel5.3版本中被彻底移除

控制器路由我认为主要是解决路由定义繁杂的情况,因为大型的应用业务复杂,控制器相当的多,我们不可能每一个控制器的方法都要定义一个路由。Laravel的控制器路由可以完美解决问题:

Route::controller('/', 'HomeController');

我们的控制器方法的写法也要有所变化:

<?php namespace AppHttpControllers; use AppHttpControllersController; class HomeController extends Controller { /** * 显示首页。 * * @return Response */ public function getIndex() { return view('home'); } /** * 显示关于界面 * * @return Response */ public function getAbout() { return view('about'); } }

依照上述例子,如果我们访问地址

 

这样的定义我们可以不用再给控制器的每一个方法定义一个路由,只需给控制器定义一个路由即可。

 

 

 

匿名函数,接收参数,例如:function{}

[Laravel] Laraval的基本控制器

在app/Http/Controllers目录下,新建一个Index/IndexController.php

定义命名空间,namespace AppHttpControllersIndex

引入Controller基本控制器,use AppHttpControllersController

定义IndexController继承Controller

实现方法index,返回数据

定义路由指定控制器的行为,例如:Route::get("/index","IndexIndexController@index");,

注意命名空间部分,新建的控制器是在根命名空间下面,指定的时候添加自己新加的命名空间

[Laravel] Laravel的基本视图

在目录resources/views/下面,创建index/index.php

在控制器中使用函数view()来调用模板,参数:文件路径,数据

路由:routes.php

<?php/*|--------------------------------------------------------------------------| Routes File|--------------------------------------------------------------------------|| Here is where you will register all of the routes in an application.| It's a breeze. Simply tell Laravel the URIs it should respond to| and give it the controller to call when that URI is requested.|*//*测试get post*/ Route::get('/', function () {    $url=url("index");    return "Hello World".$url;    //return view('welcome');});Route::post("/post",function(){    return "测试post";});/*传递参数*/Route::get("/user/{id}",function{    return "用户".$id;});/*使用控制器*/Route::get("/index","IndexIndexController@index");/*|--------------------------------------------------------------------------| Application Routes|--------------------------------------------------------------------------|| This route group applies the "web" middleware group to every route| it contains. The "web" middleware group is defined in your HTTP| kernel and includes session state, CSRF protection, and more.|*/Route::group(['middleware' => ['web']], function () {    //});

控制器:IndexController.php

<?phpnamespace AppHttpControllersIndex;use AppHttpControllersController;class IndexController extends Controller{    public function index(){        $data=array();        $data['title']="Index控制器";        return view("index.index",$data);    }}

模板:index.php

    <body>        <div class="container">            <div class="content">                <div class="title"><?php echo $title;?></div>            </div>        </div>    </body>

本文由威尼斯发布于编程,转载请注明出处:string类型的路径,1.2 最基本的路由

关键词: