Laravel 深入理解路由和URL生成

WBOY
풀어 주다: 2016-06-23 13:34:43
원래의
826명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿