Home  >  Article  >  Backend Development  >  Laravel 深入理解路由和URL生成

Laravel 深入理解路由和URL生成

WBOY
WBOYOriginal
2016-06-23 13:34:43826browse

Laravel 按URL生成和路由

在模板中我们一般不会直接写死url,而是用url助手生成url,本文介绍一下url助手的使用以及遇到的一些比较头疼的问题。

首先,我们创建了一个路由:

Route::get('articles',['uses'=>'ArticlesController@index','as'=>'articles.index']);

假设我们的项目部署在域名根目录,那么可以通过下面的url访问:

http://localhost/articles

现在,我们在模板中生成链接,有几种方式:

简单模式

<a href="{{ url('/articles') }}">链接</a>// or<a href="{{ URL::to('/articles') }}">链接</a>//为了方便阅读,下面省略html标签

这种方式,只是简单的将你指定的路径拼接到网站根url上。

路由模式

URL::route('articles.index')

这种方式是指定匹配注册路由时的 ‘as’ 参数,得到注册的uri。

控制器动作模式

URL::action('ArticlesController@index')

这种方式是根据注册路由时 ‘uses’ 参数,自动生成映射到控制器方法的uri,规则同 Route::controller() 。
举例如下:

ArticlesController@index => articlesArticlesController@getAdd => articles/addArticlesController@postAdd => articles/addArticlesController@getDelete => articles/delete

基本教程到此结束,接下来我们来面对一些令人恼怒的情况。

现在,路由变得更加复杂了,我们定义了一个这样的:

Route::controller('users','UsersController');

一条简单的语句,Laravel会自动反射 UsersController 类,并扫描其中的方法,然后生成普通的映射,举例说明吧,假设控制器中有以下方法:

function getIndex();function getEdit();function postEdit();

实际上,通过 Route::controller() 最终结果**类似**于:

Route::get('users',['uses'=>'UsersController@getIndex']);Route::get('users/edit',['uses'=>'UsersController@getEdit']);Route::post('users/edit',['uses'=>'UsersController@postEdit']);

说白了,高级路由方法只是对基本方法的封装。

好的,现在我们来生成一条url:

echo URL::action('UsersController@getEdit');

如愿以偿得到 http://localhost/users/edit ,但是我们要加点querystring参数呢?也就是俗称的 get参数。

我们想要得到 http://localhost/users/edit?id=1 应该怎么生成?

聪明人已经注意到了 URL::action() 有第二个参数,可以指定一个数组,作为url参数,那好,我们来试试。

echo URL::action('UsersController@getEdit',['id'=>1]);

好了?NO!!你得到的将是:

http://localhost/users/edit/1

如果你再加一个参数:

echo URL::action('UsersController@getEdit',['id'=>1,'author'=>'admin']);

得到的是:

http://localhost/users/edit/1/admin

它根本就忽视了你指定的key,并且没有作为 ?id=1&author=admin 附加在url末尾。

为什么?!!

想知道答案,请继续阅读:Laravel 深入理解路由和URL生成

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn