
本文共 4062 字,大约阅读时间需要 13 分钟。
Laravel 应用开发实践指南
Controller 开发
请求处理
在 Laravel 的控制器中,通过 Request
Facade 获取并处理请求数据。你可以用以下方式获取请求值:
ρεquest->input('name'); // 获取 name 参数ρρ->input('name', 'default'); // 获取 name 参数,如果不存在则返回 'default' 默认值
如果你需要确认请求中包含特定字段,可以使用 has()
方法:
if(ρψη->has('nikename')) { // 处理 'nikename' 参数}
获取所有请求参数的方法有很多种,例如通过 ρ serviços->all()
获取所有输入的数据。
请求类型判断
通过 Request
Facade 的方法来判断请求类型:
echo ρρεquest->method(); // 判断请求方法,例如 'GET', 'POST', 'PUT' 等if(ρocre->isMethod('GET')) { // 处理 GET 请求}
如果要判断是否是 AJAX 请求,可以使用 isAjax()
方法:
$flag = ρusk->is('student/*');// 判断路径是否为 'student/' 下的路由
通过 url()
方法获取当前请求的 URL 地址:
$currUrl = ρρεquest->url();
Session 管理
在 Laravel 中,Session 可以在路由组中启用,并与控制器方法结合使用:
Route::group(['middleware' => 'web'], function() { // 启用 session 中间件 Route::any('session1', ['uses' => 'StudentController@session1']); Route::any('session2', ['uses' => 'StudentController@session2']);});
通过控制器方法实现 Session 操作:
public function session1( Request $request ) { $request->session()->put('key1', 'value1');}public function session2( Request $request ) { $value = $request->session()->get('key1');}
或者使用 Session
Facade:
public function session1() { Session::put('key1', 'value1');}public function session2() { Session::get('key1', 'default_value');}
还可以将数据推送到 Session:
public function session1() { Session::push('student', 'sean'); Session::push('student', 'imooc');}
如果需要删除数据,可以使用 pull()
方法:
public function session2() { $result = Session::pull('student', 'default'); var_dump($result);}
为了获取所有 Session 数据,可以使用 all()
方法:
public function session2() { $result = Session::all(); var_dump($result);}
还可以检查是否存在某个键值:
public function session2() { if(Session::has('key1')) { $data = Session::all(); var_dump($data); }}
管理 Session 的方式还有很多,如删除所有会话数据 flush()
,或擦除特定数据 forget()
。
Controller 之 Response
在控制器中,通过 Response
Facade 回馈数据。在控制器中,你可以直接返回 JSON 格式的数据:
echo response()->json($data);
返回 JSON 数据的同时,可以传递额外信息:
return response()->json([ 'status' => 'success', 'message' => '操作成功']);
为了实现页面跳转,可以使用 Redirect
Facade:
return redirect('student/list');
通过 with()
方法可以传递额外参数:
return redirect('c1')->with('msg', '快闪数据');
或者跳转到路由:
return redirect()->action('StuController@action')->with('msg', '快闪数据');return redirect()->route('aliasname')->with('msg', '快闪数据');
回到上一个页面的方法是 back()
:
return redirect()->back();
注意:使用这些方法时,要确保你的路由和视图已经正确设置,例如使用 name
属性来定义路由 aliases,否则可能无法正确导航。
中间件开发
在 Laravel 中,中间件可以用于跨过要求,可以定义在 Global Scopes。建议在 Http/Kernel.php
中注册中间件:
$kernel->(routeMiddleware('activity', 'App\Http\Middleware\Activity'));
然后在路由组中使用中间件:
Route::group(['middleware' => 'activity'], function() { Route::any('active1', ['uses' => 'StudentController@active1']); Route::any('active2', ['uses' => 'StudentController@active2']);});
中间件可以执行前置和后置操作:
public function handle($request, Closure $next) { if(time() < strtotime('20170406')) { return redirect('active0'); } return $next($request);}
或者在后置操作中,修改响应内容:
public function handle($request, Closure $next) { $response = $next($request); echo '这是一个后置操作'; return $response;}
表单管理
静态资源管理
在 Blade 传统中,你可以使用 asset()
隐式包含路径:
{{ asset('static/js/jquery.min.js') }}
分页实现通常是在控制器中使用 paginate()
方法:
$student = Student::paginate(2);
然后在视图中渲染:
{ { $student->render() }}
表单验证
在控制器中使用 Validator:
$validationRules = [ 'name' => ['required|min:2|max:20'], 'age' => ['required|integer'],];$validator = Validator::make( $request->input(), $validationRules, [ 'required' => ':attribute 为必填项', 'min' => ':attribute 长度不符合要求', 'integer' => ':attribute 必须是整数', ], [ 'name' => '姓名', 'age' => '年龄', ]);
如果验证失败,返回错误页面:
if($validator->fails()) { return redirect()->back()->withErrors($validator);}
数据保持
在表单中,可以通过 old()
方法获取之前提交的值:
{{ old('message') }}{{ old('Student.name') }}
数据保存需要确保你的模型有正确的可赋值属性。如果你的模型中有性别字段,可以使用 sex()
方法来处理:
public function sex($index = null) { $sexOptions = [ self::SEX_GIRL => '女', self::SEX_BOY => '男', ]; return $index != null ? $sexOptions[$index] : '未知';}
这就是完整的性别处理逻辑。
发表评论
最新留言
关于作者
