Laravel 5.2 二、HTTP(高级)路由与创建控制器

1.HTTP路由

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

1.1基本路由

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Route::match([‘get‘, ‘post‘], ‘/‘, $callback); //响应get, post请求
Route::any(‘foo‘, $callback); //响应所有请求

其中,uri是相对项目根目录的url,callback是可以是一个闭包,也可以是一个控制器动作。

如果对 uri 和 url 的区别有兴趣,可以参考 http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html

1.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 = 2) {
    return $name;
})->where(‘name‘, ‘\d+‘);  //约束参数为数字

// 正则约束多个参数
Route::get(‘user/{id}/{name}‘, function ($id, $name) {
    //
})->where([‘id‘ => ‘[0-9]+‘, ‘name‘ => ‘[a-z]+‘]);

2.创建控制器

2.1手动创建

<?php
namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class IndexController extends Controller
{
    public function index($id)
    {
        return $id;
    }
}

然后在routes.php定义指向该控制器动作的路由

Route::get(‘user/{id}‘, ‘[email protected]‘);

2.2 Artisan方法创建

cmd窗口进入项目根目录,输入

php artisan make:controller UserController

这将在app/Http/Controllers/目录下创建UserController控制器。

注意,如果在app/Http/Controllers/目录下新建后台控制器目录 Admin/ ,需要在控制器文件中修正命名空间

3.高级路由

3.1命名路由

//命名闭包路由
Route:get(‘user‘, array(function(){},‘as‘ => ‘alias‘);
或
Route:get(‘user‘, array(function(){})->name(‘alias‘);

//命名控制器路由
Route:get(‘user‘, array(‘uses‘ => ‘Admin\[email protected]‘, ‘as‘ => ‘alias‘));
或
Route:get(‘user‘, array(‘uses‘ => ‘Admin\[email protected]‘})->name(‘alias‘);

3.2路由分组

3.2.1路由前缀和命名空间

例如,有两个指向后台控制器动作的路由

Route::get(‘admin/login‘, ‘Admin\[email protected]‘);
Route::get(‘admin/index‘, ‘Admin\[email protected]‘);

显然,URI 和 控制器动作 中都有相同的部分,那么,我们启用路由分组来看看

//prefix 定义url前缀,namespace 定义命名空间
Route::group(array(‘prefix‘ => ‘admin‘, ‘namespace‘ => ‘Admin‘), function(){
    Route::get(‘login‘, ‘[email protected]‘);
    Route::get(‘index‘, ‘[email protected]‘);
});

嗯,好多了,后期调整会方便些。

3.2.2资源路由

1.创建资源控制器 ArticleController

php artisan make:controller ArticleController

为它添加手动方法public function article(){}

2.定义资源路由

这里我还是选择在路由分组下定义

Route::group(array(‘prefix‘ => ‘admin‘, ‘namespace‘ => ‘Admin‘), function(){
     Route::get(‘login‘, ‘[email protected]‘);
     Route::get(‘index‘, ‘[email protected]‘);
     Route::resource(‘article‘, ‘ArticleController‘);
});

3.查看路由

php artisan route:list //列出当前的所有路由

看到生成了很多的资源路由:

这就是资源路由的好处了吧,定义一条生成很多嘛,我们只需在Admin\Article 控制器下添加上面列表中的这些方法就行了。

4.测试

在测试这些方法时,我使用了 Chrome 浏览器的 postman 插件。在测试 post 方法时,出现了CSRF错误,解决方法参考 http://www.cnblogs.com/HD/p/4555369.html

时间: 2024-11-07 05:06:53

Laravel 5.2 二、HTTP(高级)路由与创建控制器的相关文章

16、基于状态的iptable+高级路由(重点)

-- 基于状态的iptables 如果按照tcp/ip来划分连接状态,有12种之多 但iptables里只有4种状态:ESTABLISHED.NEW.RELATED及INVALID 这两个分类是两个不相干的定义.例如在TCP/IP标准描述下UDP及ICMP数据包是没有连接状态的,但在state模块的描述下,任何数据包都有连接状态. new(第一次) |      |-------------------->|      | |      |   established(回来)  |      |

Windows server 2012 搭建VPN图文教程(二)配置路由和远程访问服务

Windows server 2012 搭建VPN图文教程(一)安装VPN相关服务 Windows server 2012 搭建VPN图文教程(二)配置路由和远程访问服务 Windows server 2012 搭建VPN图文教程(三)配置VPN访问账户 Windows server 2012 搭建VPN图文教程(四)客户端访问VPN测试 PartII 配置路由和远程访问服务 本部分主要介绍如何安装和配置路由及远程访问服务的方法,请参考以下操作步骤: (续上)前面提到重新启动操作系统,重启后服务

sed(二)高级部分

原文是这么说的:一旦你理解了这里所给出的命令,那么就可以认为自己是真正的sed主人了 为了成为sed的主人,大伙一起努力吧 sed高级命令分为三块 处理多模式空间(N,D,P) 采用保持空间来保持模式空间的内容并使它可用于后续的命令(H,h,G,g,x) 编写使用分支和条件指令的脚本来更改控制了(:,b,t) 咱们先温习下,基础部分,sed的处理过程吧 通常来说,一行被读进模式空间,并且用脚本中的每个命令(一个接一个地)应用于该行.当到达脚本底部时,输出这一行,并清空模式空间.然后新行被读入模式

redis(二)高级用法

redis(二)高级用法 事务 redis的事务是一组命令的集合.事务同命令一样都是redis的最小执行单元,一个事务中的命令要么执行要么都不执行. 首先需要multi命令来开始事务,用exec命令来执行事务. 127.0.0.1:6379> multi OK 127.0.0.1:6379> hset user:1 name xiaoming QUEUED 127.0.0.1:6379> hset user:1 name daxiong QUEUED 127.0.0.1:6379>

Python学习笔记(二)——高级特性

知识点 切片 切片 取一个list或tuple的部分元素. 原理:调用__getitem__,__setitem__,__delitem__和slice函数. 根据官方的帮助文档(https://docs.python.org/2/library/operator.html)可知,_getitem_返回元素的下标,_setitem_设置元素的值,_remove_删除元素的值. 而slice函数实现最重要的切片功能.            x=a[1:5] --> x._getitem_(slic

[.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 多线程高级应用

[.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 多线程高级应用 本节要点: 上节介绍了多线程的基本使用方法和基本应用示例,本节深入介绍.NET多线程中的高级应用. 主要有在线程资源共享中的线程安全和线程冲突的解决方案:多线程同步,使用线程锁和线程通知实现线程同步. 1. ThreadStatic特性 特性:[ThreadStatic] 功能:指定静态字段在不同线程中拥有不同的值 在此之前,我们先看一个多线程的示例: 我们定义一个静态字段: static

CCNA实验二十四 路由更新的安全 &nbsp;

CCNA实验二十四 路由更新的安全 环境: Windows XP .GNS3.0.7.2 目的: 学会如何通过MD5 认证和被动端口保护路由更新,注意这两种方法在EIGRP .OSPF. RIP.IGRP等路由协议中都能用. 说明: MD5认证:通过邻居路由器之间的路由更新认证来防止无效的路由更新可能对网络造成的威胁和破坏. 被动接口:能够防止不必要的路由更新进入某个网络,可以禁止向不在安全管理范围的网段通告路由起到安全的作用,并且还能阻止EIGRP,OSPF,ISIS的HELLO包的通过.此外

第14章 高级路由特性

---------------------------------------------------------- 原则:1.应该首先定义最具体的路由.  2.建议为URL模式中的所有片段变量都提供值. 注意:1.Html.ActionLink在匹配时,前有打断原则(前面提供值后,后面的变量必须提供值,打断默认值链)  @Html.RouteLink方法,指定一条路由生成链接(路由name)  2.在参数传递给ActionLink方法时,注意将其余变量值传递null.  3.在区域下面的Web

openvpn高级路由技术

转:http://blog.csdn.net/dog250/article/details/6975179 目录 server模式以及点对点模式的OpenVPN OpenVPN的高级路由技术 1TAP模式虚拟网卡对源地址的检查以及路由配置思路 2TUN模式虚拟网卡对源地址的检查以及路由配置思路 3如何配置TUN模式的OpenVPN从而通过检查 4为何说网对网通透拓扑的配置很复杂 5OpenVPN的redirect-gateway选项 总结 1.server模式以及点对点模式的OpenVPN 前文