Phalcon 框架 笔记(1)
1、安装
直接yum即可
2、配置httpd
1. nginx+php-fpm的配置
server {
listen 80;
server_name localhost.dev;
root /var/www/phalcon/public;
index index.php index.html index.htm;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?_url=$uri&$args;
}
location ~ \.php(.*)$ {
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index /index.php;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
主要是配置 $_GET['_url'] 这个参数
另外一种配法, 用 $_SERVER['REQUEST_URI'] 这个参数:
server {
listen 80;
server_name localhost.dev;
root /var/www/phalcon/public;
index index.php index.html index.htm;
charset utf-8;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index /index.php;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
2. php内置 web服务器配置
建一个boot文件:
<?php
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
$_GET['_url'] = $_SERVER['REQUEST_URI'];
}
return false;
保存为: .htrouter.php
然后用下面的命令启动:
php -S localhost:8000 -t public .htrouter.php
public是启动文件 index.php所在的目录。
3、安装phalcon developer tools ,
https://olddocs.phalconphp.com/en/3.0.0/reference/tools.html
这个是方便我们创建项目,模块等等的。
创建composer.json
{
"require": {
"phalcon/devtools": "dev-master"
}
}
然后运行composer:
composer install
最后创建symbolic link:
ln -s ~/devtools/phalcon.php /usr/local/bin/phalcon
当然,win下面,就直接下dll扩展,然后在php.ini里面加载,然后用composer安装好devtools,然后执行phalcon.php.bat 。记得是在vendor/bin下。
开始:
1、创建项目
phalcon create-project <项目名> --type=<项目类型>
项目类型有:cli, simple, micro, modules
2、创建controller
phalcon create-controller <controller名字>
命令会自动创建相关的 Controller.php,然后默认创建好indexAction()方法。
3、在controller里面获取 用户输入
GET变量
$this->request->get("xxxx");
POST变量
$this->request->getPost("xxxx");
4、调用模版
1、默认的方式:
一个controller对应,views目录里的一个目录,
一个action对应,views目录里面同名的一个phtml
2、上述方式其实不灵活,太傻瓜,有更灵活的。
首先,services.php里面初始化View的时候,要用 Phalcon\Mvc\View\Simple 初始化,然后,public/index.php里面,初始化$application完毕后,要关闭默认模版, $application->useImplicitView(false); 接下来就可以在controller的action里面,调用模版啦:
echo $this->view->render("模版文件名", array(参数));
3、上面的是不是也麻烦了点?要改三个文件。 莫急,还有个简单些的:用$this->view->pick();
用pick()来改变默认的模版选择:
$this->view->pick("index/test_tpl"); //选择index目录下的test_tpl.phtml
$this->view->aaa; // 设定模版里的变量
4、我不要调用模版怎么办?
直接返回false;或者 $this->view->disable();
我还要重定向: $this->response->redirect("threads/view/?aaa");
PS: 本条,php内置web服务器上没测试通过
5、我要输出json怎么办?
return $this->response->setJsonContent( array( json的数据));
5、Session操作
1、simple以上级别的application,都默认加入了session支持。可以在action方法里直接访问:
$this->session->set("xxx", 1234);
$this->session->get("xxx");
$this->session->has("xxx");
$this->session->remove("xxx");
$this->session->destroy();
2、不同application之间,防止串session,可用uniqueId还设定session的前缀,在services.php里面:
$di->set(
'session',
function() {
$session = new Session(
[
'uniqueId' => 'my-app-1',
]
)
}
}
上述代码,给本application里面的session变量,设定一个 my-app-1的前缀。
3、用memcached, redis等来保存session数据:
先准备个配置数组:
$options = [
'uniqueId' => 'my-private-app',
'host' => '127.0.0.1',
'port' => 11211,
'persistent' => true,
'lifetime' => 3600,
'prefix' => 'my_',
'adapter' => 'memcache',
];
然后创建session的时候,用Factory来load:
use Phalcon\Session\Factory;
$session = Factory::load($options);
adaper支持memcache, libmemcached, redis, files,具体参见 https://github.com/phalcon/cphalcon/tree/master/phalcon/session/adapter
4、action之间,用session来保存交换数据,可以用一个特殊的persistent,大致如下:
use Phalcon\Mvc\Controller;
class UserController extends Controller
{
public function indexAction()
{
// Create a persistent variable 'name'
$this->persistent->name = 'Laura';
}
public function welcomeAction()
{
if (isset($this->persistent->name)) {
echo 'Welcome, ', $this->persistent->name;
}
}
}
其实就是用session来实现的。