转载:http://www.lunzz.net/archives/69.shtml
之前了解的第一个用C编写的php框架就是鸟哥的YAF,也学习了下感觉入手不是那么简单。最近无意中发现了Phalcon的框架,也是用C写的扩展框架。之前学习的YAF只实现了MVC,但是没有其他过多的东西可用有些蛋疼,连数据库操作封装都没有。而Phalcon则是一个非常完整的框架,已经能达到应用目的。
一、安装
windos下下载跟你自己php版本对应的dll扩展,然后放到php的ext目录,并修改php.ini添加extension=php_phalcon.dll加载扩展。
二、配置
接下来,开启apache的重写以及配置虚拟机(具体方法略)。然后编写.htaccess重写规则文件。
这是web目录结构
app controllers models views public css js img
官方文档是根目录放置一个.htaccess
#/.htaccess RewriteEngine on RewriteRule ^$ public/ [L] RewriteRule (.*) public/$1 [L]
另外public目录
#/public/.htaccess RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
这个配置好重启服务器。
三、创建项目
// public/index.php 入口文件
<?php try { //Register an autoloader $loader = new \Phalcon\Loader(); $loader->registerDirs(array( '../app/controllers/', '../app/models/' ))->register(); //Create a DI $di = new \Phalcon\DI\FactoryDefault(); //Setting up the view component $di->set('view', function(){ $view = new \Phalcon\Mvc\View(); $view->setViewsDir('../app/views/'); return $view; }); //Handle the request $application = new \Phalcon\Mvc\Application(); $application->setDI($di); echo $application->handle()->getContent(); } catch(PhalconException $e) { ech
// app/controllers/IndexController.php 控制器
class IndexController extends \Phalcon\Mvc\Controller { public function indexAction() { echo 'hello'; } }
好了,现在用浏览器访问下吧!
四、其他补充
前面说这是官方做法,而我要做的就是入口文件放在根目录,另外我用的nginx+phalcon。
所以首先配置nginx并添加重写规则
server { listen 80; server_name www.phalcon.com; #charset koi8-r; #access_log logs/host.access.log main; root "H:/WWW/phalcon"; location / { index index.html index.htm index.php; autoindex on; #重写 if (!-e $request_filename){ rewrite ^/(.*)$ /index.php?_url=/$1; } } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ .php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } }
重启服务器。
编写入口文件index.php
<?php $loader = new \Phalcon\Loader(); $loader->registerDirs(array( './app/controllers/', './app/models/' ))->register(); //Create a DI $di =new \Phalcon\DI\FactoryDefault(); $di->set('db', function(){ return new \Phalcon\Db\Adapter\Pdo\Mysql(array( "host" => "localhost", "username" => "root", "password" => "root", "dbname" => "test" )); }); //Setting up the view component $di->set('view', function(){ $view = new \Phalcon\Mvc\View(); $view->setViewsDir('./app/views/'); return $view; }); //Handle the request $application = new \Phalcon\Mvc\Application($di); // $application->setDI(); echo $application->handle()->getContent();
我这里比上面的入口多了数据库连接配置,因为后面有例子要实现数据库操作。到这步其实已经可以访问了,但是会报错因为还没有控制器。
接下来实现注册功能。
app/views/index/index.phtml
<meta charset="utf-8"> <?php use \Phalcon\Tag; ?> <h2>欢迎注册!</h2> <?php echo Tag::form("reg/register"); ?> <p> <label for="name">Name</label> <?php echo Tag::textField("name") ?> </p> <p> <label for="name">E-Mail</label> <?php echo Tag::textField("email") ?> </p> <p> <?php echo Tag::submitButton("Register") ?> </p> </form>
这里用到了phalcon的form标签,要跳转到RegController/register注册,标签学习中。。。
现在是注册控制器app/controllers/RegController.php
<?php class SigupController extends \Phalcon\Mvc\Controller{ function indexAction(){ // } function registerAction(){ $name = $this->request->getPost("name", "string"); $email = $this->request->getPost("email", "email"); $user = new Users(); $user->name = $name; $user->email = $email; $flag = $user->save(); print_r($flag); } } ?>
这里new users()是实例化一个模型,也就是数据表,所以我们要在app/models中创建这个模型。
app/models/Users.php
<?php class Users extends Phalcon\Mvc\Model{ // }
这样一个简单的注册功能就OK了!