Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Laravel 深入理解路由和URL生成

Laravel 深入理解路由和URL生成

WBOY
WBOYasal
2016-06-23 13:34:43826semak imbas

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生成

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn