<?php
namespace laytp\controller;
use app\middleware\admin\ActionLog;
use app\middleware\admin\Auth;
use app\service\admin\AuthServiceFacade;
use laytp\BaseController;
class Backend extends BaseController
{
use \laytp\traits\Backend;
protected $noNeedLogin = [] protected $noNeedAuth = [] protected $hasSoftDel = 0 protected $orderRule = ['id' => 'desc']
protected $middleware = [
Auth::class,
ActionLog::class,
];
protected function initialize()
{
AuthServiceFacade::setNoNeedLogin($this->noNeedLogin);
AuthServiceFacade::setNoNeedAuth($this->noNeedAuth);
$this->_initialize();
}
protected function _initialize()
{
}
public function buildSearchParams()
{
$where = [];
$whereOr = [];
$searchParam = $this->request->param('search_param');
if ($searchParam) {
foreach ($searchParam as $field => $valueCondition) {
if ($valueCondition['value'] !== '') {
$condition = trim(strtoupper($valueCondition['condition']));
switch ($condition) {
case '=':
$where[] = [$field, '=', $valueCondition['value']];
break;
case 'FIND_IN_SET':
$values = explode(',', $valueCondition['value']);
foreach ($values as $val) {
$whereOr[] = [$field, 'find in set', $val];
}
if($whereOr){
$where[] = function($query) use($whereOr){
$query->whereOr($whereOr);
};
}
break;
case 'LIKE':
$where[] = [$field, 'like', '%'.$valueCondition['value'].'%'];
break;
case 'IN':
$where[] = [$field, 'in', $valueCondition['value']];
break;
case 'BETWEEN':
$arrBetween = explode(' - ', $valueCondition['value']);
$where[] = [$field, 'between', $arrBetween[0].','.$arrBetween[1]];
break;
case 'BETWEEN_STRTOTIME':
$arrBetween = explode(' - ', $valueCondition['value']);
$begin_time = strtotime($arrBetween[0]);
$end_time = strtotime($arrBetween[1]);
$where[] = [$field, 'between', $begin_time.','.$end_time];
break;
case '>':
$where[] = [$field, '>', $valueCondition['value']];
break;
case '>=':
$where[] = [$field, '>=', $valueCondition['value']];
break;
case '<':
$where[] = [$field, '<', $valueCondition['value']];
break;
case '<=':
$where[] = [$field, '<=', $valueCondition['value']];
break;
}
}
}
}
return $where;
}
public function buildOrder()
{
$order = $this->orderRule;
$orderParam = $this->request->param('order_param');
if ($orderParam && $orderParam['field'] && in_array(strtolower($orderParam['type']), ['asc','desc'])) {
if(isset($order[$orderParam['field']])){
$order[$orderParam['field']] = $orderParam['type'];
}else{
$order = array_merge([$orderParam['field'] => $orderParam['type']], $order);
}
}
return $order;
}
}