路由与控制器的基础应用
新建一个控制器
新建控制器,需要进入到app/Http/Controllers文件夹下。在里面新建控制器文件,如:MemberController.php
新建控制器文件
类名=文件名(首字母大写) + Controller.php,注意与文件中类名要一致,控制器文件的名称是什么,里面的class名也要是什么。
class MemberController { ... }
编写控制器文件
// 编写控制器第一步就是先写命名空间
namespace App\Http\Controllers;
类需要继承自控制器的基类
// 写一个类, 继承自控制器基类
class MemberController extends Controller
{
public function info()
{
return 'member-info';
}
}
整体文件:
namespace App\Http\Controllers;
// 写一个类, 继承自控制器基类
class MemberController extends Controller
{
public function info($)
{
return 'member-info';
}
}
info就是控制器中的方法。
控制器与路由的关联
路由文件:在app/Http/routes.php(5.2版本)文件中;
控制器文件:在app/Http/Controllers/MemberController.php文件中
第一种关联方法
Route::get('member/info', 'MemberController@info');
语法:Route::get('路由名字',‘关联一个控制器(就是控制器类名)@控制器的方法’)
如上,我们访问public/member/info, 浏览器就会输出member-info字符串(参考一 中的代码)。
MemberController@info 就是执行 MemberController控制器的Info方法。
第二种关联方法
Route::get('member/info', ['uses' => 'MemberController@info']);
语法:Route::get('路由名字', ['uses(固定用法)' => '关联的控制器类名@控制器方法']);
同样的,get也可以换成post/match等,如:
Route::post('member/info', ['uses' => 'MemberController@info']);
Route::any('member/info', ['uses' => 'MemberController@info']);
Route::match(['get', 'post'], 'member/info', ['uses' => 'MemberController@info']);
关联控制器后,路由特性的应用
路由别名
在路由文件中:
Route::any('member/info', [
// 指向的控制器@控制器方法
'uses' => 'MemberController@info',
// 起别名
'as' => 'memberinfo'
]);
在控制器文件中:
class MemberController extends Controller
{
public function info()
{
// 在控制器中获得的别名
return route('memberinfo');
}
}
浏览器访问:public/member/info,可以看到:浏览器输出http://localhost/laravel/public/member/info,使用route函数(别名)得到了该控制器的页面地址。
路由别名是用来通过别名获得(映射到)路由路径的,不是用来访问的!比如这里通过route('memberinfo别名')可以获得路由public/member/info的访问地址,不是让你通过public/memberinfo去访问public/member/info这个地址的!
参数绑定,并添加验证规则
在路由文件中:
Route::any('member/{id}', [
'uses' => 'MemberController@info'
])->where('id', '[0-9]+');
id参数添加验证,必须是数字。那么在控制器中该如何接收?
class MemberController extends Controller
{
// 在控制器中获得传递的参数
public function info($id)
{
return 'member-info-id-' . $id;
}
}
如果输入的不是数字,那么就会报错;如果是数字:public/member/3,那么浏览器输出:member-info-id-3