建立控制器
- 主要通過
@Controller
註解實現,程式碼可以放在任意位置,但為了統一標準,建議放在app/Http/Controller
目錄下- 使用註解@Controller(prefix="路由字首"),需要引入 Controller 類
路由繫結
swoft 並沒有採用配置檔案的方式來配置路由,而是採用了註解,可以使用
@RequestMapping
註解新增路由
使用註解@RequestMapping
,需要引入該類,其中相關屬性如下:
- route 指定路由
- method 指定請求方式(GET、POST、PUT、PATCH、DELETE、OPTIONS、HEAD)
- params 指定path變數正則匹配限制
請求物件
請求物件 Request 為 Swoft\Http\Message\Request
獲取請求物件
- 通過控制器方法引數注入
(Request $request)
- 通過請求上下文獲取
Swoft\Context\Context::mustGet()->getRequest()
請求物件獲取請求資料
由於獲取請求資料內容較多,後面單獨講解,暫時預設
響應物件
響應物件 Response 為 Swoft\Http\Message\Response
獲取響應物件
- 通過控制器方法引數注入 (Response $response)
- 通過請求上下文獲取 Swoft\Context\Context::mustGet()->getResponse()
響應物件返回資料
由於獲取請求資料內容較多,比如設定狀態碼,輸出字串內容,設定響應資料格式,輸出陣列,重定向等,後面單獨講解,暫時預設
引數驗證
永遠不要相信前端傳輸的資料
swoft 提供系統自帶的驗證規則進行宣告驗證器以及自定義驗證器的功能,當然也支援自定義驗證器規則,此處預設,後續文章會詳細介紹
程式碼樣例
基類Controller
<?php declare(strict_types=1);
namespace app\Http\Controller;
use Swoft\Http\Message\Request;
interface BaseController
{
public function index(Request $request);
public function show(Request $request);
public function edit(Request $request);
public function update(Request $request);
public function create();
public function store(Request $request);
public function destroy(Request $request);
}
實現類
<?php declare(strict_types=1);
namespace app\Http\Controller\Admin;
use app\Http\Controller\BaseController;
use Swoft\Http\Message\Request;
use Swoft\Http\Server\Annotation\Mapping\Controller;
use Swoft\Http\Server\Annotation\Mapping\RequestMethod;
use Swoft\Validator\Annotation\Mapping\Validate;
use app\Validator\TestValidator;
use Swoft\Context\Context;
/**
* Class TestController
* @package app\Http\Controller\Admin
* @Controller(prefix="/admin/test")
*/
class TestController implements BaseController
{
/**
* @RequestMapping(route="index",method={RequestMethod::GET})
* @Validate(validator="TestValidator",fields={"name"})
* @param Request $request
*/
public function index(Request $request){
$response = Context::mustGet()->Response();
$data = ['name'=>'Swoft2.0'];
return $response->withData($data);
}
public function show(Request $request){
}
public function edit(Request $request){
}
public function update(Request $request){
}
public function create(){
}
public function store(Request $request){
}
public function destroy(Request $request){
}
}