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:

  1. (:any) any - can use characters or numbers
  2. (:num) num - can only use numbers
  3. (: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的更多相关文章

  1. routes.rb和link_to的一些规则

    rails文档中描述了一个知识,link_to方法用于产生链接,但链接是根据routes.rb中的路由规则来产生的.这又分为面向资源和非面向资源两种产生链接的方法.比如 routes.rb文件中有两条 ...

  2. Python requests 为pfsense 添加Routes

    # !/usr/bin/python 2 # -*- coding: utf-8 -*- __author__ = "Evilxr" import requests ips = o ...

  3. Rails ---> routes.rb 详解

    理解路由的目的 看懂routes.rb文件中的代码 使用经典的hash风格或者现在比较流行的Restful风格构造你自己的路径 断定一个路径会映射到哪一个controller和action 路由的双重 ...

  4. [转]学习Nop中Routes的使用

    本文转自:http://www.cnblogs.com/miku/archive/2012/09/27/2706276.html 1. 映射路由 大型MVC项目为了扩展性,可维护性不能像一般项目在Gl ...

  5. play HTTP路由 http://play-framework.herokuapp.com/zh/routes#syntax

    HTTP路由 HTTP路由(译者注:Play的路径映射机制)组件负责将HTTP请求交给对应的action(一个控制器Controller的公共静态方法)处理. 对于MVC框架来说,一个HTTP请求可以 ...

  6. PAT (Top Level) Practise 1008 Airline Routes(Tarjan模版题)

    1008. Airline Routes (35) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given a ...

  7. Camel routes in Spring config file

    The normal spring bean definition configuration file, the xsi:schemaLocation only has two: beans and ...

  8. 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 ...

  9. URAL 1137 Bus Routes(欧拉回路路径)

    1137. Bus Routes Time limit: 1.0 secondMemory limit: 64 MB Several bus routes were in the city of Fi ...

  10. rails里routes配置文件里的resources和resource的区别

    抄自 http://stackoverflow.com/questions/11356146/difference-between-resource-and-resources-in-rails-ro ...

随机推荐

  1. (转)MySQL数据库引擎ISAM MyISAM HEAP InnoDB的区别

    转自:http://blog.csdn.net/nightelve/article/details/16895917 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  2. (转载)static全局变量与普通的全局变量有什么区别?

    (转载)http://www.cnblogs.com/StudyRush/archive/2010/09/25/1834922.html 全局变量(外部变量)的说明之前再冠以static 就构成了静态 ...

  3. Jquery UI的datepicker插件使用方法

    原文链接;http://www.ido321.com/375.html Jquery UI是一个非常丰富的Jquery插件,并且UI的各部分插件可以独自分离出来使用,这是其他很多Jquery插件没有的 ...

  4. 【转载】strlen与sizeof区别

    自己小结: sizeof使用时,若是数组变量,则是数组变量占的大小 char a[10]; sizeof(a)=10 若是指针,则为指针大小,数组变量作为函数参数传递时,会退化成指针,且函数内是不知道 ...

  5. Spring MVC整合logback日志框架实战

    1.引入依赖,本项目maven构建,普通项目导入想要的jar包即可 版本 <properties> <slf4j-api.version>1.7.7</slf4j-api ...

  6. AIM Tech Round 3 (Div. 2) (B C D E) (codeforces 709B 709C 709D 709E)

    rating又掉下去了.好不容易蓝了.... A..没读懂题,wa了好几次,明天问队友补上... B. Checkpoints 题意:一条直线上n个点x1,x2...xn,现在在位置a,求要经过任意n ...

  7. Countly在andoid和vps集成使用,开源的统计分析sdk

    这几天项目需要,简单研究了一下countly,说实话完全满足项目需要,比umeng这类产品干净多了. Countly Mobile Analytics 下面就讲一下android 集成的过程,以及 服 ...

  8. Windows下环境变量配置

    JAVA_HOME=C:\Program Files\Java\jdk1.6.0_33   PATH+=%JAVA_HOME%\bin;   CLASSPATH=.;%JAVA_HOME%\lib\d ...

  9. JVM之字节码——Class文件格式

    如同讲汇编必先讲计算机组成原理,在开始字节码之前,我们先了解一下JVM的主要构成. 在JVM的内部,主要由如下几个部分构成: 1.数据区 方法区:存放类定义信息.字节码.常量等数据,在Sun HotS ...

  10. CodeIgniter网站静态化管理系统

    CodeIgniter本身带了一套静态化系统 使用方法如下: $this->output->cache( 3 );//每三分钟重新生成一次静态页面 不过这个在系统化的编辑中不方便管理 由此 ...