Exemple #1
0
 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);
 }