예제 #1
0
 public function register($kernel, $options = array())
 {
     if (isset($options['DefaultFieldView'])) {
         Action::$defaultFieldView = $options['DefaultFieldView'];
     }
     $container = new ServiceContainer();
     $generator = $container['generator'];
     $generator->registerTemplate('TwigActionTemplate', new TwigActionTemplate());
     $generator->registerTemplate('CodeGenActionTemplate', new CodeGenActionTemplate());
     $generator->registerTemplate('RecordActionTemplate', new RecordActionTemplate());
     $generator->registerTemplate('UpdateOrderingRecordActionTemplate', new UpdateOrderingRecordActionTemplate());
     $action = new ActionRunner($container);
     $action->registerAutoloader();
     $kernel->action = function () use($options, $action) {
         return $action;
     };
     $kernel->event->register('view.init', function ($view) use($action) {
         $view->args['Action'] = $action;
     });
     $kernel->event->register('phifty.before_path_dispatch', function () use($kernel) {
         if (!ActionRequest::hasAction($_REQUEST)) {
             return;
         }
         $runner = $kernel->action;
         // get runner
         $kernel->event->trigger('phifty.before_action');
         $strout = fopen("php://output", "w");
         // If we found any ajax action, exit the application
         if ($runner->handleWith($strout, $_REQUEST, $_FILES)) {
             exit(0);
         }
     });
 }
예제 #2
0
 public function register($kernel, $options = array())
 {
     $container = new ServiceContainer();
     $generator = $container['generator'];
     $generator->registerTemplate('TwigActionTemplate', new TwigActionTemplate());
     $generator->registerTemplate('CodeGenActionTemplate', new CodeGenActionTemplate());
     $generator->registerTemplate('RecordActionTemplate', new RecordActionTemplate());
     $generator->registerTemplate('UpdateOrderingRecordActionTemplate', new UpdateOrderingRecordActionTemplate());
     $action = new ActionRunner($container);
     $action->registerAutoloader();
     $kernel->action = function () use($options, $action) {
         return $action;
     };
     $kernel->event->register('view.init', function ($view) use($action) {
         $view->args['Action'] = $action;
     });
     $kernel->event->register('phifty.before_path_dispatch', function () use($kernel) {
         // check if there is $_POST['action'] or $_GET['action']
         if (!isset($_REQUEST['__action'])) {
             return;
         }
         $runner = $kernel->action;
         // get runner
         $kernel->event->trigger('phifty.before_action');
         $strout = fopen("php://stdout", "w");
         $result = $runner->handleWith($strout, $_REQUEST, $_FILES);
     });
 }
예제 #3
0
 /**
  * @dataProvider roleProvider
  */
 public function testRunnerWithMultiRoleInterface($roles, $resultType)
 {
     $container = new ServiceContainer();
     $generator = $container['generator'];
     $generator->registerTemplate('RecordActionTemplate', new RecordActionTemplate());
     $runner = new ActionRunner($container);
     $runner->registerAutoloader();
     $runner->registerAction('RecordActionTemplate', array('namespace' => 'OrderBundle', 'model' => 'Order', 'types' => array(['prefix' => 'Create', 'allowed_roles' => ['user', 'admin']], ['prefix' => 'Update'], ['prefix' => 'Delete'])));
     $user = new TestUser();
     $user->roles = $roles;
     $runner->setCurrentUser($user);
     $result = $runner->run('OrderBundle::Action::CreateOrder', ['qty' => '1']);
     ok($result);
     is($resultType, $result->type);
 }
예제 #4
0
 public function register(Kernel $kernel, $options = array())
 {
     $kernel->actionService = function () use($kernel, $options) {
         $container = new ServiceContainer();
         $container['cache_dir'] = $kernel->cacheDir;
         if ($kernel->locale) {
             $container['locale'] = $kernel->locale->current;
         }
         if (isset($options['DefaultFieldView'])) {
             Action::$defaultFieldView = $options['DefaultFieldView'];
         }
         $generator = $container['generator'];
         $generator->registerTemplate('TwigActionTemplate', new TwigActionTemplate());
         $generator->registerTemplate('CodeGenActionTemplate', new CodeGenActionTemplate());
         $generator->registerTemplate('RecordActionTemplate', new RecordActionTemplate());
         $generator->registerTemplate('UpdateOrderingRecordActionTemplate', new UpdateOrderingRecordActionTemplate());
         return $container;
     };
     $kernel->actionRunner = function () use($kernel) {
         $actionRunner = new ActionRunner($kernel->actionService);
         $actionRunner->registerAutoloader();
         // $actionRunner->setDebug();
         return $actionRunner;
     };
     $kernel->action = function () use($kernel) {
         return $kernel->actionRunner;
     };
     $kernel->event->register('view.init', function ($view) use($kernel) {
         $view['Action'] = $kernel->actionRunner;
     });
     $kernel->event->register('phifty.before_path_dispatch', function () use($kernel) {
         if (!ActionRequest::hasAction($_REQUEST)) {
             return;
         }
         $runner = $kernel->action;
         // the new trigger for actions defined in Bundle::actions method
         $kernel->event->trigger('phifty.prepare_actions');
         $kernel->event->trigger('phifty.before_action');
         $strout = fopen('php://output', 'w');
         // If we found any ajax action, exit the application
         if ($runner->handleWith($strout, $_REQUEST, $_FILES)) {
             exit(0);
         }
     });
 }
예제 #5
0
 public function testRunAndJsonOutput()
 {
     $container = new ServiceContainer();
     $generator = $container['generator'];
     $generator->registerTemplate('RecordActionTemplate', new RecordActionTemplate());
     $runner = new ActionRunner($container);
     $runner->registerAutoloader();
     $runner->registerAction('RecordActionTemplate', array('namespace' => 'User', 'model' => 'User', 'types' => array(['prefix' => 'Create'], ['prefix' => 'Update'], ['prefix' => 'Delete'])));
     $result = $runner->run('User::Action::CreateUser', ['email' => 'foo@foo']);
     $this->assertNotNull($result);
     $json = $result->__toString();
     $this->assertNotNull($json, 'json output');
     $data = json_decode($json);
     $this->assertTrue($data->success);
     ok($data->data);
     ok($data->data->id);
     $results = $runner->getResults();
     $this->assertNotEmpty($results);
     $this->assertNotNull($runner->getResult('User::Action::CreateUser'));
     $runner->setResult('test', 'test message');
     is(true, $runner->hasResult('test'));
     $runner->removeResult('test');
     is(false, $runner->hasResult('test'));
 }