## 控制器
控制器均在模块目录的 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 来返回自定义的操作提示