Phalcon 框架 笔记(1)

2017-12-03  本文已影响0人  贺鱼

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来实现的。

上一篇 下一篇

猜你喜欢

热点阅读