webtack / generic-controller
通用控制器包含一组通用表示,非常适合解决许多日常任务。
Requires
- php: >=7.0.0
This package is not auto-updated.
Last update: 2024-09-29 23:41:25 UTC
README
通用控制器是您的Laravel应用的扩展系统。
通用控制器包含一组通用表示,非常适合解决许多日常任务。
安装
使用composer安装
composer require webtack/generic-controller
简单示例
使用通用作为父类。您可以将这些类指定为自定义视图类的父类,并在类的主体中覆盖属性值
TemplateController
适合显示不接收数据库数据的静态页面。
use Webtack\GenericController\TemplateController; class AboutController extends TemplateController { /** * Init templateName property from view * * @return string */ function templateName() { return "generic-about"; } }
创建一个路由器并调用其中的方法 @asView
Route::get(/about', ['uses' => 'AboutController@asView']);
DetailController
当您想要获取一个给定的键对应的模型时应该使用它
use App\Models\Article; use Webtack\GenericController\DetailController; class ArticlePageController extends DetailController { /** * Init Model from Query * * @return \Illuminate\Database\Config\Model */ function model() { return new Article(); } }
创建一个路由器并调用其中的方法 @asView
Route::get(/article/{id}', ['uses' => 'ArticlePageController@asView']);
上下文数据
protected function getContextData($request, $column = []){}
负责从数据库获取数据的方法。
默认情况下,将尝试通过路由的参数 id 获取模型
但您可以通过重载此方法来覆盖此行为。它必须返回一个包含上下文名称键和模型对象的数组。
protected function getContextData($request, $column = []) { $article = $this->model(); $data = $article->where(['name' => 'Jhoon'])->first(); return ['article' => $data]; }
或者覆盖get方法
public function get($request, $name) { $context = $this->getContextData($request, ['name' => $name]); return $this->renderToResponse($context); }
支持的方法对应于请求类型。
public function get($request); public function post($request); public function put($request); public function delete($request); public function path($request); public function options($request);
所有方法都接受第一个对象 \Illuminate\Http\Request $request 以下参数可以是您在路由中定义的。
视图名称
默认情况下,DetailController将搜索名为"article-page"类的视图,您也可以在< strong>templateName方法中覆盖它
注意辅助方法 templatePrefix 和 templateSuffix。
如果您定义了它们,数据将附加到由< strong>templateName方法返回的视图名称上。
上下文名称
视图中的访问变量名称将取自以小写字母开头的模型类名。
{{ $article->title }}
当然,您可以在< strong>contextObjectName方法中覆盖它
protected function contextObjectName() { return "foobar"; }
ListController
用于显示实体列表
use Webtack\GenericController\ListController; class BlogPageController extends ListController { /** * @return \Illuminate\Database\Config\Model */ public function model() { return new Blog(); } /** * Init templateName from view * * @return string */ public function templateName() { return 'blog'; } protected function templatePrefix() { return 'blog.'; } }
创建一个路由器并调用其中的方法 @asView
Route::get(/blog', ['uses' => 'BlogPageController@asView']);
默认情况下,视图名称将附加后缀 - list,但您当然可以在相应的方法中取消或覆盖此行为。
附言。
这是一小部分可能性。但我想在必要时将来会扩展它。