控制器一般存放在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('更新失敗!');
}
}
附加的這些代碼只供參考,沒有實際意義
