public static function run($conf_file) { $err = null; $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'; //执行请求 try { require_once __DIR__ . '/AutoLoad.php'; $factory = new IoCFactory($conf_file); $router = $factory->create('phprs\\RouterWithCache'); $router(); } catch (NotFound $e) { header($protocol . ' 404 Not Found'); $err = $e; } catch (BadRequest $e) { header($protocol . ' 400 Bad Request'); $err = $e; } catch (Forbidden $e) { header($protocol . ' 403 Forbidden'); $err = $e; } catch (AuthenticationTimeout $e) { header($protocol . ' 419 Authentication Timeout'); $err = $e; } catch (ExceptionWithHttpStatus $e) { header($protocol . ' ' . $e->status); $err = $e; } catch (\Exception $e) { header($protocol . ' 500 Internal Server Error'); $err = $e; } if ($err) { header("Content-Type: application/json; charset=UTF-8"); $estr = array('error' => get_class($err), 'message' => $err->getMessage()); echo json_encode($estr); } }
public function testCyclicDependenciesWithSingleton() { $factory = new IoCFactory(array('ClassA' => array('properties' => array('classB' => '@ClassB'), 'singleton' => true), 'ClassB' => array('properties' => array('classA' => '@ClassA')))); $classA = $factory->create('ClassA'); $classB = $factory->create('ClassB'); $this->assertInstanceOf('ClassB', $classA->classB); $this->assertInstanceOf('ClassA', $classB->classA); $this->assertSame($classB->classA, $classA); }
/** * 测试绑定引用类型的请求 */ public function testReferenceReqParam() { $factory = new IoCFactory(array('phprs\\Router' => array('properties' => array('api_path' => dirname(__FILE__) . '/rest_test', 'apis' => 'MyTestApi', 'api_method' => 'funReferenceReqParam', 'ignore_load_error' => false)))); $route = $factory->create('phprs\\Router'); //输入数据 $req_buffer = ['_SERVER' => ['REQUEST_METHOD' => 'GET', 'REQUEST_URI' => '/testapi/func10'], 'header' => 'test header']; $res_buffer = array(); //输出数据缓存 $sender = array('status' => function () use(&$res_buffer) { $res_buffer[] = ['status', func_get_args()]; }, 'body' => function () use(&$res_buffer) { $res_buffer[] = ['body', func_get_args()]; }); $res = new \phprs\Response($sender); //替换默认的输出方式, 以便记录输出结果 $req = new \phprs\Request($req_buffer); $route($req, $res); $check_buffer = ['_SERVER' => ['REQUEST_METHOD' => 'GET', 'REQUEST_URI' => 'funReferenceReqParam arg0'], 'arg1' => array('arg1' => 'funReferenceReqParam arg1'), 'header' => 'test header']; $res = $req->toArray(); unset($res['router']); unset($res['path']); $this->assertEquals($check_buffer, $res); }