Laravel 深入理解路由和URL生成

WBOY
Freigeben: 2016-06-23 13:34:43
Original
827 Leute haben es durchsucht

Laravel 按URL生成和路由

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

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

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

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

http://localhost/articles
Nach dem Login kopieren

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

简单模式

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

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

路由模式

URL::route('articles.index')
Nach dem Login kopieren

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

控制器动作模式

URL::action('ArticlesController@index')
Nach dem Login kopieren

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

ArticlesController@index => articlesArticlesController@getAdd => articles/addArticlesController@postAdd => articles/addArticlesController@getDelete => articles/delete
Nach dem Login kopieren

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

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

Route::controller('users','UsersController');
Nach dem Login kopieren

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

function getIndex();function getEdit();function postEdit();
Nach dem Login kopieren

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

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

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

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

echo URL::action('UsersController@getEdit');
Nach dem Login kopieren

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

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

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

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

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

http://localhost/users/edit/1
Nach dem Login kopieren

如果你再加一个参数:

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

得到的是:

http://localhost/users/edit/1/admin
Nach dem Login kopieren

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

为什么?!!

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

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage