webtack/generic-controller

通用控制器包含一组通用表示,非常适合解决许多日常任务。

v1.1.0 2018-04-02 19:34 UTC

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方法中覆盖它

注意辅助方法 templatePrefixtemplateSuffix
如果您定义了它们,数据将附加到由< 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,但您当然可以在相应的方法中取消或覆盖此行为。

附言。

这是一小部分可能性。但我想在必要时将来会扩展它。