「PHP开发APP接口实战002」Phalcon入口文件

我将通过从零开始搭建一个共享单车APP项目接口为基础,由浅入深的讲解如果快速地系统地开发一个APP接口

本教程的宗旨是,教大家如何快速开发一个完整项目,对于一些基础或不涉及的知识不会做过多详情讲解,如需详细了解,建议去看相关官方文档

基础框架Phalcon 3.2,官网地址:https://phalconphp.com

文件结构

Phalcon不会强制要求应用程序的开发遵循特定的文件结构。因为它是松散耦合的,你可以实现Phalcon驱动的应用程序,以及使用对你来说最舒服的文件结构。
本教程的目的以此为起点,我们使用以下结构:

API/
├─app                           // 应用目录
│  ├─config                     // 配置目录
│  │      config.ini
│  │      config.php
│  │      
│  ├─controllers                    // 控制器目录
│  │      BaseController.php
│  │      IndexController.php
│  │      
│  ├─library                        // 类库目录 
│  │      Authentication.php
│  │      Config.php
│  │      Output.php
│  │      Sign.php
│  │      Utils.php
│  │      
│  ├─models                     // 数据库模型目录
│  │      Users.php
│  │      
│  └─views                      // 视图模板目录
│      │  index.phtml
│      │  
│      ├─index
│      │      h5.phtml
│      │      
│      └─layouts
│              index.phtml
│              
├─log                           // 日志目录
└─public                        // 入口目录(站点配置根目录)
    │  exception.php                // 异常处理文件
    │  index.php                    // 入口文件
    │  
    ├─css
    │      style.css
    │      
    ├─fonts
    ├─images
    ├─js
    └─uploads
            demo.png

入口文件(index.php)

你需要创建的第一个文件是public下的index.php文件。这个文件很重要; 因为它作为你的应用程序的基础,用它来控制应用程序的各个方面。 在这个文件中,你可以实现组件的初始化和应用程序的行为。

在这项目中,它负责做以下几件事:

  • 设置响应头信息
  • 定义常量
  • 设置自动加载器
  • 配置依赖注入
  • 处理应用请求

设置响应头信息

我们接口返回数据类型为JSON,所以需要对响应头做一些预设置

  1. 指定响应内容类型为JSON, 编码为UTF-8
header("Content-Type:text/json;charset=utf-8;");
  1. 指定允许其他域名访问, 解决跨域问题,这是设置为“*”,表示允许所有外部域名访问。
header('Access-Control-Allow-Origin:*');
  1. 设置响应类型,这里为了方便,我采用了常用字的RESTful API的响应设置
header('Access-Control-Allow-Methods:GET,POST,PUT,DELETE,OPTIONS');

定义绝对路径常量

// 定义项目所在目录路径
define('BASE_PATH', dirname(__DIR__));
// 定义日志文件目录路径
define('LOG_PATH', BASE_PATH . '/log');
// 定义应用目录路径
define('APP_PATH', BASE_PATH . '/app');
// 定义应用配置目录路径
define('CONFIG_PATH', APP_PATH . '/config');
// 定义INI配置文件路径
define('INI_CONFIG_PATH', CONFIG_PATH . '/config.ini');
// 定义PHP配置文件路径
define('PHP_CONFIG_PATH', CONFIG_PATH . '/config.php');

异常处理

这里我们引用了一个自己异常处理文件,统一输出错误信息和记录错误日志。详细教程: 自定义异常处理

// 导入自定义异常处理代码
require_once "exception.php";

自动加载器Autoloaders

在引导程序的第一步我们注册一个自动加载器。自动加载器在应用中被用于将类加载为控制器和数据模型。 这里我还加载了自定义类库library。

use Phalcon\Loader;
// 注册自动加载器
$loader = new Loader();
$loader->registerDirs([
    APP_PATH . '/controllers/',
    APP_PATH . '/models/',
    APP_PATH . '/library/',  // 加载自定义类库
]);
$loader->register();

依赖管理

这个容器注册phalcon内置的大部分的组件。这样我们就不用一个个去注册这些常用组件了。

use Phalcon\Di\FactoryDefault;
use Phalcon\Mvc\View;
// 创建容器
$di = new FactoryDefault();

在接下来的部分,我们注册了“view”服务向框架指明要从那个目录加载我们的视图文件。因为视图和类不一致,所以我们无法通过一个自动加载器加载视图。

// 设置视图组件
$di->set(
    'view',
    function () {
        $view = new View();
        $view->setViewsDir(APP_PATH . '/views/');
        return $view;
    }
);

初始化请求环境,路由进来的请求,然后分配解析到的动作,最后汇聚所有的返回结果在所有流程结束后将结果返回。

use Phalcon\Mvc\Application;
$application = new Application($di);

// 初始化请求环境
$response = $application->handle();
完整代码

路径:/public/index.php

<?php
// 指定编码
header("Content-Type:text/json;charset=utf-8;");
// 指定允许其他域名访问
header('Access-Control-Allow-Origin:*');
// 响应类型
header('Access-Control-Allow-Methods:GET,POST,PUT,DELETE,OPTIONS');

// 定义绝对路径常量
define('BASE_PATH', dirname(__DIR__));
define('LOG_PATH', BASE_PATH . '/log');
define('APP_PATH', BASE_PATH . '/app');
define('CONFIG_PATH', APP_PATH . '/config');
define('INI_CONFIG_PATH', CONFIG_PATH . '/config.ini');
define('PHP_CONFIG_PATH', CONFIG_PATH . '/config.php');


// 导入自定义异常处理代码
require_once "exception.php";


// 注册自动加载器
use Phalcon\Loader;

$loader = new Loader();
$loader->registerDirs([
    APP_PATH . '/controllers/',
    APP_PATH . '/models/',
    APP_PATH . '/library/',
]);
$loader->register();


// 创建容器
use Phalcon\Di\FactoryDefault;
use Phalcon\Mvc\View;

$di = new FactoryDefault();

// 设置视图组件
$di->set(
    'view',
    function () {
        $view = new View();
        $view->setViewsDir(APP_PATH . '/views/');
        return $view;
    }
);

// 设置基础URL
use Phalcon\Mvc\Url as UrlProvider;
$di->set(
    'url',
    function () {
        $url = new UrlProvider();
        $url->setBaseUri('/');
        return $url;
    }
);

// 初始化请求环境
use Phalcon\Mvc\Application;

$application = new Application($di);
$response = $application->handle();
$response->send();

示例代码下载
链接:https://pan.baidu.com/s/1sm4fdHb 密码:qj7n

    原文作者:一念觀心
    原文地址: https://www.jianshu.com/p/c01a5e0c6dff
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞