phalcon-入门篇3(优美的URL与Config)
phalcon-入门篇3(优美的URL路由与Config)
本教程基于phalcon2.0.9版本
前言先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台
优美的URL不论实在MVC开发中还是API开发中都是很重要的,它是一套规范能够帮助记忆,虽然phalcon原生的url地址并不友好但是可以通过web容器进行URL重写达到想要的效果,在本节还会对一个很重要的模块进行讲解那就是使用phalcon读取配置文件,那么就开始本节的学习吧!
注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术
附上:
喵了个咪的博客:http://w-blog.cn
教程代码库:http://git.oschina.net/wenzhenxi/Phalcon-tutorial
phalcon官网地址:https://phalconphp.com
phalcon中文社区:http://www.iphalcon.cn/
1. 优美的URL路由
注意:phalcon.w-blog.cn可以自行替换成自己的url
在开始之前我们做一个实验,在上一小节我们成功运行了hello word例如如下URL:
http://phalcon.w-blog.cn/phalcon/public/
我们请求一下:
http://phalcon.w-blog.cn/phalcon/public/?_url=/Index/index
会惊讶的发现居然结果是一样的,其实phalcon是通过最后一种方式请求的也就是带有?_url=/控制器名称/Action名称,这种方式请求的为了进一步测试我们在IndexController.php中加入如下方法:
// 测试Action
public function testAction() {
echo "<h1>This is a testAction!</h1>";
}
在试着请求:
http://phalcon.w-blog.cn/phalcon/public/?_url=/Index/test
大家会发现一个问题,还是显示了**This is a index!**这是为什么呢这个是应为被默认的view层渲染了那么我们把view层结构改一下如下:
这样的话只有请求到Index/index的时候才会进入到view层,那么这个时候再次请求我们就能得到如下结果:
那么问题来了我们今天的目的是什么,对的我们要让url优雅,我们要利用web容器的url重写功能. .
1.1 Nginx
把一下语句加入到nginx.conf中你的server{}中,下面我们来讲解一下这段配置:
#第一段话的意思是 当URL中包含 /phalcon/ 的话进入到下面的url 重写 这样定制的好处是针对项目其他的文件请求方式不会被改变
location /phalcon/ {
#这句话的意思是nginx的重写URL规则 可以看到把 /phalcon/后面的内容 放到了 public/index.php?_url=/ 后面
rewrite ^/phalcon/(.*)$ /phalcon/public/index.php?_url=/$1;
}
1.2 Apache
在phalcon目录下创建.htaccess文件加入如下语句 主要作用是指向到public
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule ((?s).*) public/$1 [L]
</IfModule>
在public加入如下语句 主要作用是定向赋值给_url
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
</IfModule>
1.3 优美的URL
如果大家已经配置好了试着访问一下以下地址:(这里Nginx亲测过,Apache未测试)
访问默认的Index/index : http://phalcon.w-blog.cn/phalcon/
访问Index/test http://phalcon.w-blog.cn/phalcon/Index/test
2. 配置文件Config
phalcon的配置文件支持四种类型分别是ini,Json,php,Yaml在教程里面分别对我们常用的三种ini,Json,php做简单的说明yaml再此不再做说明
###2.1 准备工作##
我们先在项目目录下创建如下文件已经目录
我们在ini.in中加入如下语句:
[database]
adapter = Mysql
host = localhost
username = scott
password = cheetah
dbname = test_db
在json.json中加入:
{"phalcon":{"baseuri":"/phalcon/"},"models":{"metadata":"memory"}}
在php.php中加入:
return array(
'database' => array(
'adapter' => 'Mysql',
'host' => 'localhost',
'username' => 'scott',
'password' => 'cheetah',
'dbname' => 'test_db'
),
'phalcon' => array(
'controllersDir' => '../app/controllers/',
'modelsDir' => '../app/models/',
'viewsDir' => '../app/views/'
));
2.2 获取配置项
上面我们已经配置好了文件以及目录,那么问题就是我们要如何使用,当然所有的一切都要在index.php中初始化配置也不例外,代码如下:
//在文件顶部加上 如下语句 作用是加载命名空间中的类
use PhalconConfigAdapterIni as ConfigIni;
use PhalconConfigAdapterJson as ConfigJson;
use PhalconConfigAdapterPhp as ConfigPhp;
为们在代码中加入如下初始化项
$ConfigIni = new ConfigIni('../Config/ini.ini');
$ConfigJson = new ConfigJson('../Config/json.json');
$ConfigPhp = new ConfigPhp('../Config/php.php');
这个时候我们就已经可以开始使用配置了:
echo $ConfigIni->database->host . '</br>';
echo $ConfigJson->phalcon->baseuri . '</br>';
echo $ConfigPhp->database->username . '</br>';
我们再次请求会发现有如下输出
那么恭喜你已经成功读取到了配置文件
3. 小结
我们回顾一下今天教程的内容,优美的URL通过web容器Nginx或者Apache的URL重写来实现,还有phalcon中的3种配置文件的使用,那么到这里我们已经对phalcon有了一最基本的了解,下一节我们一同来学习phalcon的log的使用以及Session的使用,谢谢大家的支持!
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!
Phalcon技术交流:364520707 PhalCon中文社区:287484785 欢迎大家的加入!
- PHP基础——字符串的常用操作
- NLP之tfidf与textrank算法细节对比基于结巴分词
- 【Go 语言社区】算法课程 第一季 第4节-汉诺塔
- C/C++——map的基本操作总结
- Python生成词云图,TIIDF方法文本挖掘: 词频统计,词云图
- C/C++——vector的基本操作总结
- 数据库负载急剧提高的应急处理(二) (r9笔记第55天)
- 社团划分——有向图的Label Propagation算法
- Python基础——网络编程
- 分区表的一个持续改进方案(r9笔记第53天)
- python jieba分词(结巴分词)、提取词,加载词,修改词频,定义词库
- MySQL中的NULL和空串比较 (r9笔记第52天)
- Core-periphery decomposition--核心-外围模型R代码整理
- 停止数据库没有响应的问题分析(r9笔记第51天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 源码分析之 FactoryBean接口不为人知的秘密
- 图书管理系统(三)图书管理系统实战(1)
- 图书管理系统(二)整合 SSM,你学会了么
- CellChat:细胞间相互作用分析利器
- 我对一类常考算法面试题的详细分析
- Python 面向对象编程(上篇)
- 基于TencentOS-tiny实现PM2.5传感器(攀藤PMSA003)数据解析思路及实现
- Centos7搭建SVN+Apache+iF.SVNAdmin实现web管理SVN
- 安卓最后一个大题复习
- 关于 Spring Ioc,看这一篇就够了!
- 第1次Spring源码学习之@Bean、@Configuration、xml、分析
- Spring 中的依赖注入(DI),你都知道多少?
- Docker配置1台Nginx+3台Tomcat做负载均衡
- Centos7.x+Docker部署RabbitMQ
- LeetCode(1)-找出数组中重复的数字