118 lines
3.3 KiB
PHP
118 lines
3.3 KiB
PHP
<?php
|
||
|
||
namespace Core;
|
||
|
||
use mysql_xdevapi\Exception;
|
||
|
||
/**
|
||
* Base controller
|
||
*
|
||
* PHP version 7.0
|
||
*/
|
||
abstract class Controller
|
||
{
|
||
/**
|
||
* Parameters from the matched route
|
||
* @var array
|
||
*/
|
||
protected $route_params = [];
|
||
protected $querys = [];
|
||
public $body ;
|
||
protected $input;
|
||
protected $debug = false;
|
||
protected $query_string;
|
||
protected $params = [];
|
||
/**
|
||
* Class constructor
|
||
*
|
||
* @param array $route_params Parameters from the route
|
||
*
|
||
* @return void
|
||
*/
|
||
public function __construct($route_params)
|
||
{
|
||
switch($_SERVER['CONTENT_TYPE']){
|
||
case 'application/json':
|
||
$this->body = file_get_contents('php://input');
|
||
$this->input = json_decode($this->body);
|
||
break;
|
||
}
|
||
preg_match("/^.{0,}\?(.{0,})$/i", $_SERVER['REQUEST_URI'], $matches);
|
||
if(sizeof($matches) > 0){
|
||
$pieces = explode("&", $matches['1']);
|
||
foreach ($pieces as $key => $value) {
|
||
|
||
$piece = explode("=", $value);
|
||
$this->querys[$piece[0]] = $piece[1];
|
||
}
|
||
}
|
||
$this->route_params = $route_params;
|
||
if(isset($route_params['id'])){
|
||
$this->params = explode('/',$route_params['id']);
|
||
}
|
||
}
|
||
/**
|
||
* Magic method called when a non-existent or inaccessible method is
|
||
* called on an object of this class. Used to execute before and after
|
||
* filter methods on action methods. Action methods need to be named
|
||
* with an "Action" suffix, e.g. indexAction, showAction etc.
|
||
*
|
||
* @param string $name Method name
|
||
* @param array $args Arguments passed to the method
|
||
*
|
||
* @return void
|
||
*/
|
||
public function __call($name, $args)
|
||
{
|
||
$method = $name . 'Action';
|
||
if (method_exists($this, $method)) {
|
||
if ($this->before() !== false) {
|
||
call_user_func_array([$this, $method], $args);
|
||
$this->after();
|
||
}
|
||
} else {
|
||
throw new \Exception("Method $method not found in controller " . get_class($this));
|
||
}
|
||
}
|
||
/**
|
||
* Before filter - called before an action method.
|
||
*
|
||
* @return void
|
||
*/
|
||
protected function before()
|
||
{
|
||
|
||
}
|
||
/**
|
||
* After filter - called after an action method.
|
||
*
|
||
* @return void
|
||
*/
|
||
protected function after(){
|
||
|
||
}
|
||
public function JsonResp($code,$data,$msg){
|
||
header('Access-Control-Allow-Origin:*');
|
||
header('Access-Control-Allow-Methods:OPTIONS, GET, POST'); // 允许option,get,post请求
|
||
header('Access-Control-Allow-Headers:x-requested-with'); // 允许x-requested-with请求头
|
||
header('Access-Control-Allow-Headers:x-ijt'); // 允许x-requested-with请求头
|
||
header('Content-Type: application/json'); // 允许x-requested-with请求头
|
||
|
||
$ret["code"] = $code;
|
||
$ret["msg"] = $msg;
|
||
$ret["data"] = $data;
|
||
$dat = json_encode ( $ret );
|
||
$this->_rsp($dat);
|
||
}
|
||
protected function _rsp($dat){
|
||
if (is_string($dat)){
|
||
print $dat;
|
||
}else{
|
||
throw new Exception("internal err",201);
|
||
}
|
||
}
|
||
protected function Crash($code,$msg){
|
||
print_r($msg);
|
||
}
|
||
}
|