Routes
Routes
Routing lets you create your own URL paths, based on the path you can load a closure or a controller.
Routing Set-up
Namespaces are included in all classes now. A namespace is like a layer, adding a namespace to a class means there can be multiple classes with the same name as long as each class is in a different namespace.
With routes the namespace is Routing\Router:: followed by the method call, typing out the namespace every time is long winded, thankfully short cuts can be created by creating an alias:
use Routing\Router;
By using the use keyword Routing\Router, it can be referenced as Router.
To define a route, call the static name Router:: followed by either a post or a get ('any' can also be used to match both post and get requests) to match the HTTP action. Next, set the path to match and call a closure or a controller.
Router::any('', 'closure or controller');
Closures
A closure is a function without a name, they are useful when you only need simple logic for a route, to use a closure first call Router:: then set the URL pattern you want to match against, followed by a function.
Router::get('simple', function() {
//do something simple
});
Controllers and Models can also be used in a closure by instantiating the root controller.
$c = new \App\Core\Controller();
$m = new \App\Models\Users();
$m->getUsers();
Having said that it's best to use a controller, if you need access to a model.
Closures are convenient but can soon become messy.
Controllers
To call a route to a controller, instead of typing a function you can enter a string. In the string type the namespace of the controller (App/Controllers if located in the root of the controllers folder) then the controller name. Finally, specify what method of that class you wish to load. They are dictated by an '@'symbol.
For example, to have a controller called Users (in the root of the controllers folder) and to load ausersList method, you would use the following:
Router::get('users', 'App\Controllers\Users@usersList');
The above would call the Users controller and the userList method when /users is located in the URL, via a get request.
Routes can respond to both GET and POST requests.
To use a post route:
Router::post('blogsave', 'App\Controllers\Blog@savePost');
To respond to either a post or get request, use any:
Router::any('blogsave', 'App\Controllers\Blog@savePost');
Groups
Group routes are new to 3.0. Routes can now be placed in a group, which allows all routes within the group to inherit the group name.
Router::group('admin', function() {
Router::any('add', 'App\Controllers\Demo@cool');
Router::any('settings', 'App\Controllers\Demo@nice');
});
Is the equivalent to
Router::any('admin/add', 'App\Controllers\Admin@add');
Router::any('admin/settings', 'App\Controllers\Admin@settings');
Group Prefixes and Namespaces
The Router::group() can also accept an array as the first parameter and permit commands like:
Router::group(['prefix' => 'admin', 'namespace' => 'App\Controllers\Admin'], function() {
Router::match('get', 'users', 'Users@index');
Router::match('get', 'users/create', 'Users@create');
Router::match('post', 'users', 'Users@store');
Router::match('get', 'users/(:any)', 'Users@show');
Router::match('get', 'users/(:any)/edit', 'Users@edit');
Router::match(['put', 'patch'], 'users/(:any)', 'Users@update');
Router::match('delete', 'users/(:any)', 'Users@destroy');
});
Where the prefix admin will turn the route users/create into admin/users/create and the namespaceApp\Controllers\Admin will prepend onto Users@create, turning intoApp\Controllers\Admin\Users@create
Router::resource()
The Router::resource() method introduces the ability to write the group of resourceful routes, with the following specifications:
HTTP Method | Route | Controller Method |
---|---|---|
GET | /photo | index |
GET | /photo/create | create |
POST | /photo | store |
GET | /photo/(:any) | show |
GET | /photo/(:any)/edit | edit |
PUT/PATCH | /photo/(:any) | update |
DELETE | /photo/(:any) | destroy |
The previous code snippet can now be written as:
Router::group(['prefix' => 'admin', 'namespace' => 'App\Controllers\Admin'], function() {
Router::resource('users', 'Users');
Router::resource('categories', 'Categories');
Router::resource('articles', 'Articles');
});
OR
Router::resource('admin/users', 'App\Controllers\Admin\Users');
Router::resource('admin/categories', 'App\Controllers\Admin\Categories');
Router::resource('admin/articles', 'App\Controllers\Admin\Articles');
Routing Filters
Routes can also use filters to dynamically pass values to the controller / closure, there are 3 filters:
- (:any) any - can use characters or numbers
- (:num) num - can only use numbers
- (:all) all - will accept everything including any slash paths
To use a filter place the filter inside parenthesis and use a colon inside route path.
Router::get('blog/(:any)', 'App\Controllers\Blog@post');
Would get past to app/Controllers/Blog.php anything after blog/ will be passed to post method.
public function post($slug)
{
// Some code ...
}
Optional Parameters
New to 3.0 is allowing filters to be optional
Filters which are written like (:any) are required to match the route but writing a filter as (/(:any))makes it optional.
This route supplied with Nova has one filter that is required then a further 3 optional filters. Multiple filters should be inside the first parenthesis.
Router::any('admin/(:any)(/(:any)(/(:any)(/(:any))))', 'App\Controllers\Demo@test');
Full Example
use Routing\Router;
//define routes
Router::get('', 'App\Controllers\Welcome@index');
//call a controller in called users inside a admin folder inside the controllers folder
Router::('admin/users', 'App\Controllers\Admin\Users@list');
Routes的更多相关文章
- routes.rb和link_to的一些规则
rails文档中描述了一个知识,link_to方法用于产生链接,但链接是根据routes.rb中的路由规则来产生的.这又分为面向资源和非面向资源两种产生链接的方法.比如 routes.rb文件中有两条 ...
- Python requests 为pfsense 添加Routes
# !/usr/bin/python 2 # -*- coding: utf-8 -*- __author__ = "Evilxr" import requests ips = o ...
- Rails ---> routes.rb 详解
理解路由的目的 看懂routes.rb文件中的代码 使用经典的hash风格或者现在比较流行的Restful风格构造你自己的路径 断定一个路径会映射到哪一个controller和action 路由的双重 ...
- [转]学习Nop中Routes的使用
本文转自:http://www.cnblogs.com/miku/archive/2012/09/27/2706276.html 1. 映射路由 大型MVC项目为了扩展性,可维护性不能像一般项目在Gl ...
- play HTTP路由 http://play-framework.herokuapp.com/zh/routes#syntax
HTTP路由 HTTP路由(译者注:Play的路径映射机制)组件负责将HTTP请求交给对应的action(一个控制器Controller的公共静态方法)处理. 对于MVC框架来说,一个HTTP请求可以 ...
- PAT (Top Level) Practise 1008 Airline Routes(Tarjan模版题)
1008. Airline Routes (35) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given a ...
- Camel routes in Spring config file
The normal spring bean definition configuration file, the xsi:schemaLocation only has two: beans and ...
- Howto add permanent static routes in Ubuntu
Static routing is the term used to refer to the manual method used to set up routing. An administrat ...
- URAL 1137 Bus Routes(欧拉回路路径)
1137. Bus Routes Time limit: 1.0 secondMemory limit: 64 MB Several bus routes were in the city of Fi ...
- rails里routes配置文件里的resources和resource的区别
抄自 http://stackoverflow.com/questions/11356146/difference-between-resource-and-resources-in-rails-ro ...
随机推荐
- (转) mysql数据库引擎:MyISAM和InnoDB(性能优化)
转自 http://yuwensan126.iteye.com/blog/1138022 Mysql 数据库中,最常用的两种引擎是innordb和myisam.Innordb的功能要比myiasm强大 ...
- HDU 5007 Post Robot
Post Robot Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- Kryo 为什么比 Hessian 快
Kryo 是一个快速高效的Java对象图形序列化框架,它原生支持java,且在java的序列化上甚至优于google著名的序列化框架protobuf.由于 protobuf需要编写Schema文件(. ...
- 使用struts的同步令牌避免form的重复提交
struts1避免重复提交 一.使用方法 1. 假如你要提交的页面为toSubmit.jsp: 2. 在打开toSubmit.jsp的Action1中加入:saveToken(request),例 ...
- 【Jenkins】linux下Jenkins集成ant进行编译并发送结果
三个文章吧: 1 如何使用ant编译执行jmeter测试用例,并生成html报告 2 如何在Linux下搭建jenkins环境. 3 如何在Linux下搭建的jenkins中执行ant构建运行,并发送 ...
- e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServer数据库的访问
上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step 二 图片验证码的识别” ...
- 玩一个:可以显示任何xml树结构的xaml定义
学习中, 玩一玩. 效果如下.Xaml随后. <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio ...
- js中的new关键字都干了些什么?
new 操作符 在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在javascript中,我们将这类方式成为Pseudoclassic ...
- bzoj 2816: [ZJOI2012]网络(splay)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2816 [题意] 给定一个无向图,满足条件:从一个节点出发的同色边不超过2条,且不存在同 ...
- HDFS的shell操作
bin/hadoop命令操作: namenode -format 格式化文件系统 fs(缩写:FileSystem) 运行一个文件系统的用户客户端 bin/hadoop fs常用命令操作: -ls h ...