phalcon index.php,「PHP开发APP接口实战002」Phalcon入口文件

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

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

文件结构

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,所以需要对响应头做一些预设置

指定响应内容类型为JSON, 编码为UTF-8

header("Content-Type:text/json;charset=utf-8;");

指定允许其他域名访问, 解决跨域问题,这是设置为“*”,表示允许所有外部域名访问。

header('Access-Control-Allow-Origin:*');

设置响应类型,这里为了方便,我采用了常用字的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

// 指定编码

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();

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值