1 路由机制
mvc中路由是一个非常重要的功能,其作用是:
a.根据用户访问(url)匹配传入的请求及请求附带的参数;
b.调用请求映射controller的action方法,并把参数传入;
c.返回action方法处理结果;
下图以简单的形式表示一个用户请求:
2 laravel中的路由
在laravel 5.1.4中,路由配置文件是 app/http/routes.php。
2.1 直接返回字符串的路由
在原有的代码后面追加如下代码段:
route::get('/hw', function () { return 'hello world';});
打开浏览器访问:http://localhost:801/hw,如下图示:
2.2 返回视图的路由
在上面的代码中再追加如下代码段:
route::get('/home', function () { return view('home');});
在目录resources/views下创建视图文件:home.php,内容如下:home
打开浏览器访问:http://localhost:801/home
如果上例的代码中需要向视图页传递参数怎么办呢?修改我们的路由代码:
route::get('/home', function () { return view('home', ['name' => '张三']);});
修改视图代码:[],您好!
再看看访问的效果:
如果视图太多,一般是按模块甚至按功能存放的,在resources/views目录下依次新建目录:public/demo,然后把home.php移到该目录中。
修改上例中的路由代码为:
route::get('/home', function () { return view('public.demo.home', ['name' => '张三']);});
再次访问还是能正常打开页面的。
2.3 路由参数
在前文已经说过,路由可以匹配出用户的请求参数,那如何匹配呢?在上例的路由文件中追加代码段:
route::get('user/{name}', function($name) { return '用户姓名:'.$name;});
打开浏览器访问:http://localhost:801/user/jack
那如果是两个参数怎么办呢?修改路由代码:
route::get('user/{name}/{age}', function($name,$age) { return '用户姓名:'.$name.',年龄:'.$age;});
打开浏览器访问:http://localhost:801/user/jack/23
假如age参数不是必须的的呢?再次修改路由代码:
route::get('user/{name}/{age?}', function($name,$age=null) { return '用户姓名:'.$name.',年龄:'.$age;});
访问地址:http://localhost:801/user/jack
2.4 路由参数的约束
在正常情况下,用户访问的一些参数是有一定的规则,比如读取用户信息时的用户id可能是数字,修改新闻信息时的新闻id可能是guid等等。
修改routes.php文件,追加以下代码:
route::get('new/{id}', function($id){ return '新闻id:'.$id;})->where('id', '[0-9]+');
打开浏览器访问 http://localhost:801/new/3 是这样的:
可访问 http://localhost:801/new/abc 时则提供页面不存在:
相应的,当同时对多个参数限制时则需要使用数组,修改上例的路由代码:
route::get('new/{id}/{title}', function($id,$title){ return '新闻id:'.$id.',新闻标题:'.$title;})->where(['id' => '[0-9]+', 'title' => '[a-z]+']);
访问效果这里就不演示了。
另外,我们可以配置全局的限制条件,打开文件:app/providers/routeserviceproviders.php,修改boot方法如下: public function boot(router $router) { // $router->pattern('id', '[0-9]+'); parent::boot($router); }
修改上例中的路由代码为:
route::get('new/{id}', function($id){ return '新闻id:'.$id;});
访问效果和上例是一样的,这里不在演示。2.5 获取路由参数
在routes.php中可以获取路由参数,以此来做其他的操作,修改上例的路由代码:
route::get('new/{id}', function(request $request, $id){ if ($request->route('id') == '2') { return '新闻id是2'; }else{ return '新闻id不是2,值是:'.$id; }});
在routes.php中
use illuminate\http\request;
打开浏览器,分别访问 http://localhost:801/new/2 和 http://localhost:801/new/3 即可看到不同的页面效果。
路由还有很多复杂的功能,有待研究。
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了laravel 514 + bootstrap 334 笔记二:laravel 路由,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。