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

Laravel 深入理解路由和URL生成

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-23 13:34:43
Original
896 people have browsed it

Laravel 按URL生成和路由

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

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

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

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

http://localhost/articles
Copy after login

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

简单模式

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

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

路由模式

URL::route('articles.index')
Copy after login

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

控制器动作模式

URL::action('ArticlesController@index')
Copy after login

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

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

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

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

Route::controller('users','UsersController');
Copy after login

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

function getIndex();function getEdit();function postEdit();
Copy after login

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

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

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

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

echo URL::action('UsersController@getEdit');
Copy after login

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

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

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

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

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

http://localhost/users/edit/1
Copy after login

如果你再加一个参数:

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

得到的是:

http://localhost/users/edit/1/admin
Copy after login

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

为什么?!!

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

source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template