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 ...
 
随机推荐
- 新手!SDK Manager里找不到API安装的选项怎么办?
			
只有Tools和EXTRAS文件夹的选项,没有API包安装,咋办呢? 回复讨论(解决方案) 网络有问题吗? 网络有问题吗? 就是不知道啊 你是在eclispe里面打开的?还是在外面直接打开的?没有 ...
 - “菜单”(menubar)和“工具栏”(toolbars)
			
"菜单"(menubar)和"工具栏"(toolbars) "菜单" (menubar)和"工具栏"(toolbars) ...
 - 文件I/O操作(2)
			
lseek函数原型为int lseek(int fd,int offset, int whence),fd为定位文件的描述符,offset为偏移量,如果是正数,则向文件末尾偏移,负数时,则向文件头偏移 ...
 - 关于java环境配置的问题
			
在以前刚开始接触Java环境配置问题的时候,配置了一大串的字符串,所有的路径全部在一个path变量里面,特别冗杂. 由于这两天重新再装了一个版本的JDK结果出现毛病了,就只有重新配置该环境变量,结果又 ...
 - 关于在MDK中使用 printf 函数
			
microlib 提供了一个有限的 stdio 子系统,它仅支持未缓冲的 stdin.stdout 和 stderr. 这样,即可使用 printf() 来显示应用程序中的诊断消息. 要使用高级 I/ ...
 - 【DOM】1.DOM优化
			
1.JS include :DOM BOM ECMA 2.Browser 分别独立实现dom & JS as if two isolated islands 3.JS操作DOM from th ...
 - 浅谈reverse_iterator的base()函数
			
非原创,原文链接:http://blog.csdn.net/shuchao/article/details/3705252 调用reverse_iterator的base成员函数可以产生"对 ...
 - cocos2d-x 3.0版本已经加了socket部分
			
cocos2d-x开发者的福音到了,在3.0版本中新增了HttpClient.HttpRequest.SocketIO.Websocket库,需要网络交互的同学应该可以用到,并且它已经与cocos2d ...
 - IOS上的字符编码
			
IOS字符编码 字符编码经常能听到的有Unicode.UTF-8.GBK.GB2312.GB18030.BIG5等.这些编码方式都有什么区别呢? 其实这些编码,大体分两类:全球统一编码和各过个语种的独 ...
 - HDU5781--ATM Mechine(概率dp)
			
题意:Alice忘记了自己银行里存了多少钱,只记得在[0,k]之间.每次取钱如果余额足够就出钱,否则警告一次,警告超过w次就会把你抓起来,在不想被警察抓起来的前提下,Alice采取最优策略,求期望取钱 ...