Laravel5.1控制器小结
控制器一般存放在app\Http\Controllers
目录下,所有Laravel控制器都应继承基础控制器类。
基础控制器
- 基础控制器例子:
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
/**
* 显示指定用户的个人数据。
*
* @param int $id
* @return Response
*/
public function showProfile($id)
{
return view('user.profile', ['user' => User::findOrFail($id)]);
}
}
- 路由指定控制器行为:
Route::get('user/{id}', 'UserController@showProfile');
- 路由指定控制器行为:
Route::get('user/{id}', 'UserController@showProfile');
RESTful资源控制器:
- 资源控制器让你可以轻松地创建与资源相关的 RESTful 控制器,注册资源化路由:
Route::resource('photos', 'PhotosController');
这一条路由声明会创建多个路由,用来处理各式各样和相片资源相关的的 RESTful 行为。
- 由资源控制器处理的行为:
- 附加资源控制器
如果想在资源控制器中默认的资源路由之外加入其它额外路由,则应该在调用Route::resource
之前 定义这些路由。否则,由resource
方法定义的路由可能会不小心覆盖你附加的路由:
Route::get('photos/popular', 'PhotosController@method');
Route::resource('photos', 'PhotosController');
附:
RESTful资源控制器的更新和删除操作调用起来比较特殊,特在此贴点代码:
在view中调用删除操作:
<form action="{{ url('admin/article/'.$article->id) }}" method="POST" style="display: inline;">
{{ method_field('DELETE') }}
{{ csrf_field() }}
<button type="submit" class="btn btn-danger">删除</button>
</form>
在对应的控制器中进行删除操作:
public function destroy($id)
{
Comment::find($id)->delete();
return redirect()->back()->withInput()->withErrors('评论删除成功!');
}
在view中调用更新操作:
<form action="{{ url('admin/article/'.$article->id) }}" method="POST">
{{ method_field('PATCH') }}
{{ csrf_field() }}
<input type="text" name="title" class="form-control" required="required" placeholder="请输入标题" value="{{ $article->title }}">
<br>
<textarea name="body" rows="10" class="form-control" required="required" placeholder="请输入内容">{{ $article->body }}</textarea>
<br>
<button class="btn btn-lg btn-info">提交修改</button>
</form>
在对应的控制器中进行更新操作:
public function update(Request $request,$id)
{
//数据验证
$this->validate($request, [
'title' => 'required|max:255',
'body' => 'required',
]);
$article = Article::find($id);
$article->title = $request->get('title');
$article->body = $request->get('body');
if ($article->save()) {
return redirect('admin/article')->withErrors('更新成功!');
} else {
return redirect()->back()->withInput()->withErrors('更新失败!');
}
}
附加的这些代码只供参考,没有实际意义