## 控制器
控制器均在模塊目錄的 Http/Controllers 目錄中,以Test模塊為例,控制器位于modules/Test/Http/Controllers
前臺控制器:modules/Test/Http/Controllers
admin控制器:modules/Test/Http/Controllers/Admin
api控制器:modules/Test/Http/Controllers/Api
## 開發流程
推薦使用開發助手,進入模塊開發助手后,選擇test模塊,然后進入控制器開發,新建控制器
> 自動生成控制器或者修改控制器后,可以點擊路由參考,復制里面的代碼粘貼在對應的路由文件中
## 控制器說明
請參考laravel的控制器文檔,需要注意的是,控制器集成的并不是laravel內置的基礎控制器,而是繼承自核心模塊中的基礎控制器:
* 后臺控制集成自:Modules\Core\Base\AdminController
* 前臺控制器繼承自:Modules\Core\Base\FrontController
* Api控制器集成自:Modules\Core\Base\ApiController
一個典型的后臺控制器如下:
```<?php
namespace Modules\Test\Http\Controllers\Admin;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Core\Base\AdminController;
//use Modules\Test\Models\Test;
class TestController extends AdminController
{
/**
* 首頁
*
* @return Response
*/
public function index()
{
$this->title = trans('test::test.title');
// 全部獲取
//$this->tests = Test::all();
// 部分獲取
//$this->tests = Test::with('some')->where('key','value')->orderby('id','asc')->get();
// 分頁獲取
//$this->tests = Test::with('some')->where('key','value')->orderby('id','asc')->paginate(25);
return $this->view();
}
/**
* 新建
*
* @return Response
*/
public function create()
{
$this->title = trans('test::test.create');
$this->test = Test::findOrNew(0);
return $this->view();
}
/**
* 保存
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$test = new Test;
$test->fill($request->all());
$test->save();
return $this->success(trans('master.created'), route('test.test.index'));
}
}
```
## 與laravel控制器不同之處:
### 模板變量賦值:
模板變量賦值可以使用 $this->title = '標題' 這種方式,在視圖文件中就可以使用 {{$title}} 輸出變量,相當于 with('title', '標題')
### 視圖文件
視圖使用 return $this->view() ,可以省略view中的視圖名稱,程序會根據控制器和動作名稱自動在當前模塊下尋找視圖(等價于 $this->view('controller.action')
> 如果不想使用默認的視圖,也可以顯示申明視圖 return $this->view('test.index')或者 return $this->view('index'),詳見視圖尋址規則
### 操作提示,成功和錯誤
統一成功和錯誤的返回方式,使用return $this->success() 和 return $this->error() ,success 和 error 方法在普通請求時會顯示操作提示頁面,在ajax請求時返回json信息
#### 成功:
return $this->success('消息內容', '跳轉鏈接[可選]')
例如創建成功:
`return $this->success(trans('master.created'));`
`return $this->success(trans('master.created'), route('test.test.index'));`
#### 錯誤:
return $this->error('消息內容')
例如創建失敗:
`return $this->error(trans('master.create.failed'));`
`
> succes 和 error 均調用的是基類中的message方法,如果有特殊需求可以使用 $this->message 來返回自定義的操作提示