• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Laravel5.2中HTTP路由与创建控制器以及资源路由的示例详解

php 搞代码 3年前 (2022-01-22) 30次浏览 已收录 0个评论
文章目录[隐藏]

一、HTTP路由

所有路由都定义在 App\Providers\RouteServiceProvider 类载入的 app/Http/routes.php文件中。

1. 基本路由

简单的 Laravel 路由只接受一个URI和一个闭包

Route::get('foo', function () {    return 'Hello, Laravel!';});

对于常见的 HTTP 请求,Laravel 有以下几种路由

Route::get($uri, $callback); //响应 get 请求Route::post($uri, $callback);Route::put($uri, $callback);Route::patch($uri, $callback);Route::delete($uri, $callback);Route::options($uri, $callback);Route::match(['get', 'post'], $uri, $callback); //响应 get, post 请求Route::any('foo', $callback); <span>!本文来源gaodai#ma#com搞*!代#%^码网5</span><pre>搞gaodaima代码

//响应所有请求

其中,$callback 可以是一个闭包,也可以是一个控制器方法。实际上,在开发中有不少情况是用作控制器方法的。

2. 路由参数

//单个路由参数Route::get('user/{id}', function ($id) {    return 'User '.$id;});//多个路由参数Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {    //});//单个路由参数(可选)Route::get('user/{id?}', function ($id = 1) {    return 'User '.$id;});//多个路由参数(可选)Route::get('posts/{post}/comments/{comment?}', function ($postId, $commentId = 1) {    //});//注意:多个参数时,只可以对最后一个参数设置可选,其他位置设置可选会解析错误// 正则约束单个参数Route::get('user/{name?}', function ($name = 'Jone') {    return $name;})->where('name', '\w+');  //约束参数为单词字符(数字、字母、下划线)// 正则约束多个参数Route::get('user/{id}/{name}', function ($id, $name) {    //})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

二、创建控制器

使用 Artisan 命令创建 php artisan make:controller UserController

现在,在 app/Http/Controllers 这个控制器目录下就生成了 UserController.php 的控制器文件。

三、高级路由

1. 命名路由

//命名闭包路由Route:get('user', array('as' => 'alial', function(){}); //或 name 方法链Route:get('user', function(){})->name('alias');//命名控制器方法路由Route:get('user', array('uses' => 'Admin\IndexController@index', 'as' => 'alias')); //或 name 方法链Route:get('user', 'Admin\IndexController@index')->name('alias'));

2. 路由分组

2.1 路由前缀和命名空间

例如,有两条指向控制器方法的路由

Route::get('admin/login', 'Admin\IndexController@login');Route::get('admin/index', 'Admin\IndexController@index');

拿第一条来说,

参数一:admin/login 表示这个 URI 在请求网站根目录下的 admin/login 资源,完整地址就是 http://域名/admin/login (这里开启了 Apache 的路由重写,隐藏了 “index.php“ ),这个请求被映射到第二个参数中指定的控制器方法。注意,网站根目录是入口文件所在目录,在 Laravel 中就是 public 目录,配置服务器时最好也指向这里。

参数二:Admin\IndexController@login 表示这个控制器方法是在 App\Http\Controllers 命名空间下的,连起来就是 App\Http\Controllers\Admin\IndexController 控制器里的 login 方法。

显然,两条路由的 URI 和 控制器方法 都有相同的部分,那么,启用路由分组可以提取出公共部分:

// 第一个数组参数中,prefix 键定义 URI 的公共部分,namespace 键定义方法名(命名空间语法)的公共部分Route::group(array('prefix' => 'admin', 'namespace' => 'Admin'), function(){    Route::get('login', 'IndexController@login');    Route::get('index', 'IndexController@index');});

2.2 资源路由

资源路由就是映射到资源控制器的路由,Laravel 资源控制器内置了对资源增删改查的 7 个方法以及 7 条路由。

首先,创建资源控制器 ArticleController

php artisan make:controller Admin\ArticleController  --resource

上述命令请确保在 app/Http/Controllers 目录下存在 Admin 目录。

这样就生成了资源控制器在 app/Http/Controllers/Admin/ArticleController.php 文件,内置的 7 个方法如下 :

<?phpnamespace App\Http\Controllers\Admin;use Illuminate\Http\Request;use App\Http\Requests;use App\Http\Controllers\Controller;class LinksController extends Controller{    /**     * 显示一个资源的列表     *     * @return \Illuminate\Http\Response     */    public function index()    {        //    }    /**     * 显示一个表单来创建一个新的资源     *     * @return \Illuminate\Http\Response     */    public function create()    {        //    }    /**     * 保存最新创建的资源     *     * @param  \Illuminate\Http\Request  $request     * @return \Illuminate\Http\Response     */    public function store(Request $request)    {        //    }    /**     * 显示指定的资源     *     * @param  int  $id     * @return \Illuminate\Http\Response     */    public function show($id)    {        //    }    /**     * 显示一个表单来编辑指定的资源     *     * @param  int  $id     * @return \Illuminate\Http\Response     */    public function edit($id)    {        //    }    /**     * 更新指定的资源     *     * @param  \Illuminate\Http\Request  $request     * @param  int  $id     * @return \Illuminate\Http\Response     */    public function update(Request $request, $id)    {        //    }    /**     * 删除指定的资源     *     * @param  int  $id     * @return \Illuminate\Http\Response     */    public function destroy($id)    {        //    }}

然后,定义资源路由 这里我还是选择在路由分组下定义,定义一条就好

Route::group(array('prefix' => 'admin', 'namespace' => 'Admin'), function(){     Route::get('login', 'IndexController@login');    Route::get('index', 'IndexController@index');    // 资源路由    Route::resource('article', 'ArticleController');});

最后,查看路由。有了资源控制器 和 资源路由,就可以看一下对以上 7 个方法的 HTTP 请求方式了。

使用 Artisan 命令 php artisan route:list 列出当前的所有路由,请求方式、URI、控制器方法、中间件都罗列出来了。

以上就是Laravel5.2中HTTP路由与创建控制器以及资源路由的示例详解的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Laravel5.2中HTTP路由与创建控制器以及资源路由的示例详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址