用AI赚第一桶💰低成本搭建一套AI赚钱工具,源码可二开。 广告
目录 [TOC] ## 新建控制器 你可以在 app/Controller 目录或其子目录中新建控制器,一个控制器的代码实例如下所示: ```php namespace App\Controller; // 声明控制器的命名空间 (遵循 PSR-4 规范) use App\Controller\Controller; // 引入 base Controller,所有控制器应继承 base Controller // 引入所需类 use WorkerF\Http\Requests; use App\Models\Test; class TestController extends Controller { // 进行依赖注入,控制器执行时会自动注入这些类到方法中 public function test(Test $test, Requests $request) { $rst = $test->getData(); return $rst; } } ``` ## 依赖注入 WorkerA 使用了 IOC 容器进行控制器类实例的获取和控制器实例方法的执行,所以控制器中所有的方法都支持依赖注入,大大提高了框架的可扩展性和灵活性: ```php // 自动注入 Requests 实例 public function test(Requests $request) { return $request->post(); } ``` ### 需要注意的一点: 当该方法被配置到动态路由时,依赖注入的参数总是在动态路由传来的参数前面。 例如: ```php // 正确 public function test(Requests $request, $id) { return $id; } // 错误 public function test($id, Requests $request) { return $id; } ``` 同样,控制器的构造方法也是支持依赖注入的: ```php namespace App\Controller; use App\Controller\Controller; use App\Service\TestService; class TestController extends Controller { protected $service; // 控制器实例创建时会自动注入 TestService 实例 public function __construct(TestService $testService) { $this->service = $testService; } } ``` 如果注入的实例也有依赖的话,IOC 容器会继续向下查找依赖进行依赖注入,直到所有的依赖注入完成。 如: ```php namespace App\Service; use App\Models\Test; class TestService { protected $model; // IOC 容器在 Controller 中注入 TestService 实例时会先将 Test 实例注入 TestService 实例中,以此类推 public function __construct(Test $test) { $this->model = $test; } } ``` ## 方法的返回值 ### 数组、对象 当方法返回数组、对象时,框架会将返回值编码为 json 数据作为 HTTP 响应主体返回给用户。 ### 字符串 当方法返回字符串时,框架会原封不动的将字符串作为 HTTP 响应主体返回给用户。 ### 闭包 返回闭包时框架会在构建 HTTP Response 时执行闭包。默认以空字符串作为 HTTP 响应主体返回给用户。 重定向方法 Route::redirect() 和 Response::redirect() 的返回值就是闭包,详情请阅读 [WorkerF](https://github.com/wazsmwazsm/WorkerF) 的源码。