Пример #1
0
     * Read the configuration
     */
    $config = (include APP_PATH . "/app/config/config.php");
    /**
     * Read auto-loader
     */
    include APP_PATH . "/app/config/loader.php";
    /**
     * Read services
     */
    include APP_PATH . "/app/config/services.php";
    /**
     * Handle the request
     */
    $app = new \Phalcon\Mvc\Micro($di);
    $app->getRouter()->setUriSource(\Phalcon\Mvc\Router::URI_SOURCE_SERVER_REQUEST_URI);
    $app->before(new App\Middleware\OAuthMiddleware());
    /**
     * Mount routes collections
     */
    $collections = (include APP_PATH . '/app/collections/collections.php');
    foreach ($collections as $collection) {
        $app->mount($collection);
    }
    $app->handle();
} catch (\Exception $e) {
    if ($app->config->debug) {
        echo $e->getMessage() . '<br>';
        echo '<pre>' . $e->getTraceAsString() . '</pre>';
    }
}
 public function testMicroCollectionsLazy()
 {
     Phalcon\DI::reset();
     $app = new Phalcon\Mvc\Micro();
     $collection = new Phalcon\Mvc\Micro\Collection();
     $collection->setHandler('PersonasLazyController', true);
     $collection->map('/', 'index');
     $collection->map('/edit/{number}', 'edit');
     $app->mount($collection);
     $app->handle('/');
     $this->assertEquals(PersonasLazyController::getEntered(), 1);
     $app->handle('/edit/100');
     $this->assertEquals(PersonasLazyController::getEntered(), 101);
 }
Пример #3
0
// Set Access-Control-Allow headers.
$exampleCollection->options('/', 'optionsBase');
$exampleCollection->options('/{id}', 'optionsOne');
// First paramter is the route, which with the collection prefix here would be GET /example/
// Second paramter is the function name of the Controller.
$exampleCollection->get('/', 'get');
// This is exactly the same execution as GET, but the Response has no body.
$exampleCollection->head('/', 'get');
// $id will be passed as a parameter to the Controller's specified function
$exampleCollection->get('/{id:[0-9]+}', 'getOne');
$exampleCollection->head('/{id:[0-9]+}', 'getOne');
$exampleCollection->post('/', 'post');
$exampleCollection->delete('/{id:[0-9]+}', 'delete');
$exampleCollection->put('/{id:[0-9]+}', 'put');
$exampleCollection->patch('/{id:[0-9]+}', 'patch');
$app->mount($exampleCollection);
/**
 * After a route is run, usually when its Controller returns a final value,
 * the application runs the following function which actually sends the response to the client.
 *
 * The default behavior is to send the Controller's returned value to the client as JSON.
 * However, by parsing the request querystring's 'type' paramter, it is easy to install
 * different response type handlers.  Below is an alternate csv handler.
 */
$app->after(function () use($app) {
    // OPTIONS have no body, send the headers, exit
    if ($app->request->getMethod() == 'OPTIONS') {
        $app->response->setStatusCode('200', 'OK');
        $app->response->send();
        return;
    }
Пример #4
0
 $app = new \Phalcon\Mvc\Micro($di);
 /**
  * Add your routes here
  */
 /**
  * Expose the /v1/currency end point
  */
 $currency = new MicroCollection();
 $currency->setHandler('CurrencyController', true);
 $currency->setPrefix('/v1/currency');
 $currency->post('/', 'addCurrency');
 $currency->get('/', 'getAllCurrencies');
 $currency->put('/{code}', 'updateCurrency');
 $currency->get('/{code}', 'getCurrency');
 $currency->delete('/{code}', 'deleteCurrency');
 $app->mount($currency);
 /**
  * Expose the /v1/rates end point
  */
 $rates = new MicroCollection();
 $rates->setHandler('RateController', true);
 $rates->setPrefix('/v1/rates');
 $rates->post('/', 'addRate');
 $rates->put('/{code}', 'updateRate');
 $rates->get('/{code}', 'getRate');
 $app->mount($rates);
 /**
  * Expose the /v1/emails end point
  */
 $emails = new MicroCollection();
 $emails->setHandler('EmailController', true);
Пример #5
0
 /**
  * Handles the request.
  */
 public function main()
 {
     /**
      * Our application is a Micro application, so we must explicitly define all the routes.
      * For APIs, this is ideal.  This is as opposed to the more robust MVC Application
      * @var $app
      */
     $app = new \Phalcon\Mvc\Micro();
     $app->setDI($this->di);
     /**
      * This will require changes to fit your application structure.
      * It supports Auth, Session auth, and Exempted routes.
      * It also allows all Options requests, as those tend to not come with
      * cookies or basic auth credentials and Preflight is not implemented the
      * same in every browser.
      */
     $app->before(function () use($app) {
         // Oauth, for programmatic responses
         if ($app->request->getHeader('X_COMPARE_REST_API_KEY') && $app->request->get('language') && $app->request->get('countryCode')) {
             $session = new SessionsController();
             $result = $session->resource($app->request->getHeader('X_COMPARE_REST_API_KEY'));
             if ($result) {
                 return true;
             } else {
                 throw new HTTPException('Invalid access token.', 401, ['dev' => 'Please provide credentials by passing your access token.', 'internalCode' => 'Unauth:1']);
             }
         }
         // If we made it this far, we have no valid auth method, throw a 401.
         throw new HTTPException('Must provide credentials.', 401, ['dev' => 'Please provide credentials by passing your access token, language and country code.', 'internalCode' => 'Unauth:1']);
         return false;
     });
     /**
      * Mount all of the collections, which makes the routes active.
      */
     foreach ($this->di->getShared('collections') as $collection) {
         $app->mount($collection);
     }
     /**
      * The base route return the list of defined routes for the application.
      * This is not strictly REST compliant, but it helps to base API documentation off of.
      * By calling this, you can quickly see a list of all routes and their methods.
      */
     $app->get('/', function () use($app) {
         $routes = $app->getRouter()->getRoutes();
         $routeDefinitions = array('GET' => array(), 'POST' => array(), 'PUT' => array(), 'PATCH' => array(), 'DELETE' => array(), 'HEAD' => array(), 'OPTIONS' => array());
         foreach ($routes as $route) {
             $method = $route->getHttpMethods();
             $routeDefinitions[$method][] = $route->getPattern();
         }
         return $routeDefinitions;
     });
     /**
      * After a route is run, usually when its Controller returns a final value,
      * the application runs the following function which actually sends the response to the client.
      *
      * The default behavior is to send the Controller's returned value to the client as JSON.
      * However, by parsing the request querystring's 'type' paramter, it is easy to install
      * different response type handlers.  Below is an alternate csv handler.
      */
     $app->after(function () use($app) {
         // OPTIONS have no body, send the headers, exit
         if ($app->request->getMethod() == 'OPTIONS') {
             $app->response->setStatusCode('200', 'OK');
             $app->response->send();
             return;
         }
         // Respond by default as JSON
         if (!$app->request->get('type') || 'json' == $app->request->get('type') || 'option' == $app->request->get('type')) {
             // Results returned from the route's controller.  All Controllers should return an array
             $records = $app->getReturnedValue();
             $response = new JSONResponse();
             $response->useEnvelope(true)->convertSnakeCase(true)->send($records);
             return;
         } else {
             if ('xml' == $app->request->get('type')) {
                 $records = $app->getReturnedValue();
                 $response = new XMLResponse();
                 $response->send($records);
                 return;
             } else {
                 if ('csv' == $app->request->get('type')) {
                     $records = $app->getReturnedValue();
                     $response = new CSVResponse();
                     $response->useHeaderRow(true)->send($records);
                     return;
                 } else {
                     throw new HTTPException('Could not return results in specified format', 403, array('dev' => 'Could not understand type specified by type paramter in query string.', 'internalCode' => 'NF1000', 'more' => 'Type may not be implemented. Choose either "json", "xml" or "csv"'));
                 }
             }
         }
     });
     /**
      * The notFound service is the default handler function that runs when no route was matched.
      * We set a 404 here unless there's a suppress error codes.
      */
     $app->notFound(function () use($app) {
         throw new HTTPException('Not Found.', 404, array('dev' => 'That route was not found on the server.', 'internalCode' => 'NF1000', 'more' => 'Check route for mispellings.'));
     });
     /**
      * If the application throws an HTTPException, send it on to the client as json.
      * Elsewise, just log it.
      */
     set_exception_handler(function ($exception) use($app) {
         //HTTPException's send method provides the correct response headers and body
         if (is_a($exception, 'App\\Common\\Lib\\Application\\Exceptions\\HTTPException')) {
             $exception->send();
         }
         error_log($exception);
         error_log($exception->getTraceAsString());
     });
     $app->handle();
 }