标签 phalcon 下的文章

2017
07-29

Phalcon教程 HOT

2017
07-20

Phalcon入门教程之模型CURD(2) HOT

上一篇 Phalcon入门教程之模型CURD(1) 中介绍了 Phalcon 模型的 insertselect 操作,本篇将介绍 updatedelete 的用法。文中所用的示例代码皆沿用上一篇的数据表,这里不在赘述。

更新记录

Phalcon 模型更新记录的示例代码如下:

$articleModel = new ArticlesModel();
//先调用 findFirst() 获取一条记录,返回值是当前模型对象
$article = $articleModel->findFirst([
    'conditions' => 'aid = :aid:',
    'bind' => [
        'aid' => 3
    ],
]);
if($article) {
    //使用返回的模型对象调用 update() 函数执行更新操作
    $result = $article->update([
        'title' => 'Phalcon更新测试1',
    ]);
    //update() 函数返回值为boolean
    var_dump($result);
}

监听到的SQL语句如下:

SELECT * FROM `test_articles` WHERE `test_articles`.`aid` = :aid LIMIT :APL0

UPDATE `test_articles` SET `title` = ?, `introduce` = ?, `status` = ?, `view_number` = ?, `is_recommend` = ?, `is_top` = ?, `create_by` = ?, `create_time` = ?, `modify_by` = ?, `modify_time` = ? WHERE `aid` = ?
查看全文 >
2017
07-19

Phalcon入门教程之模型CURD(1) HOT

上一篇《Phalcon入门教程之模型》中介绍了数据库模型操作的一些基础功能,本篇将介绍模型的 selectinsert 用法。由于数据库模型操作的内容比较多和细,所以本篇只是粗略的介绍基础用法,以及补充文档中没有提及的一些用法和注意点。因此,强烈建议大家在熟读文档的前提下,再阅读此篇教程。

数据表

假设数据表名为 test_articles,数据结构及记录下:

mysql> select * from test_articles;
+-----+--------------+--------------+--------+-------------+--------------+--------+-----------+---------------------+-----------+---------------------+
| aid | title        | introduce    | status | view_number | is_recommend | is_top | create_by | create_time         | modify_by | modify_time         |
+-----+--------------+--------------+--------+-------------+--------------+--------+-----------+---------------------+-----------+---------------------+
|   1 | 英语演讲     | 纯口语式       |      1 |           0 | 0            | 0      |         1 | 2017-05-21 05:13:46 |         1 | 2017-05-21 05:13:46 |
|   2 | 限购政策     | 快买房         |      1 |           0 | 0            | 0      |         1 | 2017-05-21 05:13:46 |         1 | 2017-05-21 05:13:46 |
+-----+--------------+--------------+--------+-------------+--------------+--------+-----------+---------------------+-----------+---------------------+

其中 aid 是主键,其他每个字段的意思就不做介绍了。

查找记录

Phalcon\Mvc\Model 为数据查询提供了多种函数,下面将直接用demo来介绍其用法。

查找多条记录

使用 find() 函数可以查找多条记录:

$articleModel = new ArticlesModel();
//查询所有记录,返回一个对象
$result = $articleModel->find();
//循环输出结果
foreach($result as $record){
  var_dump($record->aid); 
  var_dump($record->title);
}

find() 函数返回的是 Phalcon\Mvc\Model\Resultset\Simple 对象,我们可以通过 foreach 循环输出结果。也可以将结果集对象转成一个二维数组:

$records = $result->toArray();

还可以统计结果集对象的记录总数:

$count = count($result);
查看全文 >
2017
05-25

Phalcon入门教程之模型

Phalcon 提供了四种方式操作Mysql数据库:模型、PHQL、数据库抽象层以及原生SQL。不论何种方式,首先都需要在DI中注册 db 服务才能正常使用:

DI注册db服务

//  文件路径:app/core/services.php
$di -> setShared('db', function () use($config) {
    $dbconfig = $config -> database -> db;
    $dbconfig = $dbconfig -> toArray();
    if (!is_array($dbconfig) || count($dbconfig)==0) {
        throw new \Exception("the database config is error");
    }
    $connection = new \Phalcon\Db\Adapter\Pdo\Mysql(array(
        "host" => $dbconfig['host'], "port" => $dbconfig['port'],
        "username" => $dbconfig['username'],
        "password" => $dbconfig['password'],
        "dbname" => $dbconfig['dbname'],
        "charset" => $dbconfig['charset'])
    );
    return $connection;
});

数据库连接信息配置如下:

// 文件路径:app/config/system.php
return array(
    //数据库表配置
    'database' => array(
        //数据库连接信息
        'db' => array(
            'host' => '127.0.0.1',
            'port' => 3306,
            'username' => 'admin',
            'password' => 'admin',
            'dbname' => 'test',
            'charset' => 'utf8',
        ),

        //表前缀
        'prefix' => 'test_',
    ),
);
查看全文 >
2017
05-04

Phalcon入门教程之Volt模板引擎 HOT

volt 是Phalcon中集成的模板引擎,我们也可以更换为其他模板引擎或同时使用多个模板引擎。本文只介绍 Phalcon 自带的 volt 模板引擎。

启用Volt

和其他模板引擎一样,我们需要将 volt 模板注册到 views 组件中,并设置模板文件通用后缀名,或者直接使用标准化的后缀名 .phtml 才能正常使用:

//文件路径:Marser\App\Frontend\FrontendModule.php
$di->setShared('view', function () use ($config, $di) {
    $view = new \Phalcon\Mvc\View();
    //设置模板根目录
    $view->setViewsDir(ROOT_PATH . '/app/frontend/views/');
    //注册模板引擎
    $view->registerEngines(array(
        //设置模板后缀名
        '.phtml' => function ($view, $di) use ($config) {
            $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di);
            $volt->setOptions(array(
                //模板是否实时编译
                'compileAlways' => false,
                //模板编译目录
                'compiledPath' => ROOT_PATH . '/app/cache/compiled/frontend'
            ));
            return $volt;
        },
    ));
    return $view;
});

用法

volt 模板中 基本用法变量表达式流程控制等部分的具体用法,文档中已有详细说明,请直接翻阅Phalcon文档 。这里分享一下大家咨询比较多的几处用法以及踩过的坑。

查看全文 >
2017
03-12

Phalcon入门教程之控制器 HOT

控制器在MVC分层中的主要作用是处理请求与响应。Phalcon中的控制器类必须以“ Controller ”为后缀,action则以“ Action ”为后缀。
Phalcon\Mvc\Controller ”是Phalcon中控制器的基类,我们写的控制器类通过继承此基类,可以调用在DI中注册的各种服务。一个简单的控制器类示例如下:

namespace Marser\App\Frontend\Controllers;

use Phalcon\Mvc\Controller;

class IndexController extends Controller {
    public function indexAction(){
        echo 'front index';
        exit();
    }
}

在浏览器中访问 http://localhost/index/index 即可看到打印结果。

初始化

initialize()函数

Phalcon\Mvc\Controller 中提供了初始化函数 initialize(),它是最先执行的,并且会优先于任何控制器的其他action:

    public function initialize() {
        echo 'initialize';
    }

有朋友可能会问,为什么不是 __construct() 函数?

onConstruct()函数

其实在 Phalcon\Mvc\Controller 控制器基类中,__construct() 函数已经被声明为 final ,明确禁止子类重写此函数(参考:http://www.iphalcon.cn/api/Phalcon_Mvc_Controller.html ) 。同时, Phalcon\Mvc\Controller 中提供了另一个方法 onConstruct() 来执行初始化的逻辑:

    public function onConstruct(){
        var_dump('onConstruct');
    }

那么, initialize()onConstruct() 的区别是什么?执行顺序又是怎样的?

查看全文 >
2017
03-07

Phalcon入门教程之目录结构

很多初学Phalcon的朋友,对于以Phalcon框架为基础构建的项目,应该如何组织目录结构有点摸不着头脑。比如多模块的项目中,如何共用"libs"类库和“models”目录中模型类的情况,就有很多刚接触Phalcon朋友经常在群里问这种问题。

我们在翻阅Phalcon文档的时候,会看到"教程2:INVO简介"中有一个项目结构的demo,其中总结到“Phalcon不会强求应用程序使用特定的文件结构”。那么,Phalcon通过什么形式来加载这些可以任意组织的目录结构呢?

下面以PhalconCMS的代码为例来进行讲解。

PhalconCMS目录结构

  PhalconCMS/
      app/
          backend/
              controllers/
              models/
              repositories/
              views/
          cache/
          config/
          core/
          frontend/
               controllers/
               models/
               repositories/
               views/
          helpers/
          libs/
          service/
          tasks/
      crontab/
      public/
查看全文 >
2017
01-12

Phalcon入门教程之安装

Phalcon安装

  # 下载安装包
  wget https://github.com/phalcon/cphalcon/archive/v3.0.1.tar.gz

  # 重命名
  mv v3.0.1.tar.gz cphalcon-3.0.1.tar.gz

  #解压
  tar -zxvf cphalcon-3.0.1.tar.gz

  #切换目录(根据php版本和操作系统位数切换到相应的目录)
  cd cphalcon-3.0.1/build/php7/64bits/

  #准备环境(通过find / -name phpize命令可查找出phpize的完整路径)
  /usr/local/php/bin/phpize

  #编译(通过find / -name php-config命令可查找出php-config的完整路径)
  ./configure --with-php-config=/usr/local/php/bin/php-config

  #安装
  make && make install

编译安装成功之后,在"php.ini"的末尾引入扩展

    extension=phalcon.so

重启php-fpm即可。

若在云服务器上安装失败或者卡住,可参考此博文:云服务器编译安装phalcon失败

查看全文 >
2017
01-05

PhalconCMS源码解析之多模块

在2016年的最后一天里,把PhalconCMS 1.0版完成开发、封版并上线部署之后,我一直在想是否需要整理一个源码解析类的系列教程。虽然PhalconCMS的源码组织并不是很复杂,稍微有点Phalcon基础的同学就能看明白,但是很多刚入门的同学对于Phalcon的知识点都是一知半解的状态,并没有一个系统的认知。所以我还是决定写PhalconCMS源码解析这个系列教程,跟大家分享我在学习使用Phalcon以及开发PhalconCMS的过程中的一些经验和总结。一方面呢,我自身对于Phalcon知识点的理解和总结,也不是非常的系统和全面,也是希望借助这个机会,能和更多的Phalcon爱好者互相交流学习;另一方面也是希望能给刚接触Phalcon的同学一些启发,帮助他们少走弯路。希望不会是误人歧途 :)

这一篇跟大家分享一下PhalconCMS多模块的代码组织。在PhalconCMS中有“前台(app/frontend目录)”和“后台(app/backend目录)”两个模块,分别对应着访客和管理员的用户群体。下面直接通过代码来分析。


多模块文件加载

在“app/core/loader.php”文件中,对“前台模块”和“后台模块”的“controllers”、“models”文件目录进行加载。这里是用的命名空间加载(registerNamespaces)方式,也可以用自动加载(registerDirs)来处理。

查看全文 >
2016
12-31

PhalconCMS 1.0发布啦~~ HOT

一直都计划着用phalcon来开发一套博客系统 。一来是替换我这个博客站原来的程序,二来也是想为phalcon的开源事业做点贡献。许多接触phalcon的玩家,因为中文资料少、入门门槛高,以及可供参考参照学习的开源项目少,直接从入门到放弃,去学习其他框架了。希望这套博客系统,能为大家在学习phalcon的路上,提供些许帮助~

这套博客系统的名字叫PhalconCMS。我也没想出什么特别好听且有寓意的名字,所以暂且就叫PhalconCMS吧。目前是1.0版本,已经在我这个博客站里进行了部署。这个版本只实现了博客系统基本的内容管理和展现,通俗点说就是一些CRUD操作和缓存处理,没有实现插件机制、主题机制、用户权限体系等等相对复杂点的功能。这些东西,在后面的版本中,我再逐步迭代添加。

下面介绍一下PhalconCMS的安装

推荐环境

  • PHP 5.6+
  • mysql 5.6+
  • phalcon 3.0+
查看全文 >
微信扫一扫