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. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.4.6

    Let $A$ and $B$ be two matrices (not necessarily of the same size). Relative to the lexicographicall ...

  2. 25、BroadCastRecevier

    BroadCastRecevier 有两种注册方式 1. 清单文件里注册: 一旦应用程序被部署到手机, 广播接受者就会生效 2. 代码里面注册: 一旦代码所在的进程被杀死了, 广播接受者就失效了. 广 ...

  3. Android UI -- 的基础知识。

    在介绍基础知识之前先明确几个基本的概念 View 视图是所有可视组件的基类,所有的UI控件包括布局类都是从View派生出来的. ViewGroup ViewGroup是View的扩展,可以放置多个Vi ...

  4. SQLBulkCopy使用

    SQLBulkCopy,用于数据库之间大批量的数据传递.通常用于新,旧数据库之间数据的更新.即使表结构完全不同,也可以通过字段间的对应关系,顺利的将数据导过来. 首先,SQLBulkCopy需要2个连 ...

  5. LeetCode题解——Reverse Integer

    题目: 数字翻转,即输入123,返回321:输入-123,返回-321. 代码: class Solution { public: int reverse(int x) { , sign = ; ) ...

  6. uva 11178

    题意:根据A,B,C三点的位置确定D,E,F三个点的位置. 贴模板 #include<cstdio> #include<cmath> #include<cstring&g ...

  7. mvc5入门,经典教程。。

    转子 http://www.yanjinnan.com/archives/category/tech/efmvc ASP.NET MVC 5  一 入门 发表于2013 年 8 月 12 日由颜晋南 ...

  8. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇01:道路的自动生成》

    1.道路的自动生成 道路自动生成概述: 3D跑酷游戏的核心就是跑,在跑这一过程中增加趣味性使得游戏具有更多的可玩性.道路的自动生成和自由拼接,为游戏增设了更多的不可预见性.这种不可预见性使得玩家在游戏 ...

  9. C++中的虚函数解析[The explanation for virtual function of CPlusPlus]

    1.什么是虚函数?                                                                                            ...

  10. CentOS 6.5 安装配置

    关于CentOS的安装,网上有很多详细的教程.其实重点就在于硬盘的分区和软件的定制这两块.下面我在VirtualBox虚拟机上安装 CentOS-6.5-i386-minimal. 1.在起始菜单处选 ...