入门Phalcon,一个PHP框架 - 第2部分

关于PhalconPHP

Phalcon是一个PHP框架,促进了模型-视图-控制器体系结构,有许多框状的功能,你会期望在一块这种软件:ORM,模板引擎,路由,高速缓存等。

在本教程中,我们将继续在我们离开的最后一次 ,当我们安装了我们的Ubuntu 12.04 VPSPhalcon和管理,以我们的第一个字符串打印到使用Phalcon控制器屏幕。 在本教程中,我们将讨论使用其他两个核心MVC组件:视图和模型。

沿着这条跟进,我假设你已经通过前面的教程中列出的步骤了,有你的应用程序Phalcon打印出的Hello World如果你的浏览器指向你的ip地址/项目的名称 所以让我们进去吧。

视图

在前面的教程中,我们使用一个方法(IndexAction)创建了默认的Index控制器:
echo "<h1>Hello World!</h1>";

如你所知,这不是打印到屏幕上的最好的方式; 和像其他PHP框架一样,Phalcon提供了一个模板系统,我们应该使用。 换句话说,我们可以使用一个视图,并通过一个变量传递的Hello World字符串它。

这部作品与Phalcon的方式是在app / views文件夹,我们需要创建一个名为作为我们的控制器中的另一个文件夹,这个文件夹里面一个控制器的动作命名的文件。 这样,Phalcon在调用控制器操作时自动加载此视图。 因此,让我们做到这一点对我们的第一个控制器/动作指数 首先创建文件夹:
mkdir /var/www/project_name/app/views/index

在此文件夹中,创建一个带有phtml扩展名的文件(以控制器操作命名):
nano /var/www/project_name/app/views/index/index.phtml

在此文件中,从控制器剪切IndexAction的内容,并将其粘贴在标签之间:
<?php echo "<h1>Hello World!</h1>"; ?>

现在控制器操作为空,但字符串从对应于该控制器/操作的视图打印。 所以在这个简短的例子中,我们没有传递任何东西到视图,但从控制器,我们只是演示了如何自动加载视图。 现在我们在控制器中声明该变量,然后将其传递给要显示的视图。

返回到索引控制器和方法的indexAction里,粘贴以下(确保这是所有有此功能中):
$string = "Hello World!";
$this->view->setVar("string", $string);

在第一行中,我们我们的文本值设置为$字符串变量,并在第二个我们用我们的父控制器类的视图()方法的SETVAR方法,这个变量发送到另外一个可以在视图内进行访问:也叫$字符串

现在编辑视图并替换为:
<?php echo "<h1>Hello World!</h1>"; ?>

有了这个:
<h1><?php echo $string; ?></h1>

现在你应该在浏览器中得到相同的东西。 像这样,我们分离了逻辑(我们的字符串值,所有意图和目的可以动态生成或检索)从表示(我们包裹在视图中的字符串的html头标记)。 这是MVC架构和良好的现代编程实践的原理之一。

模型和数据库

现在我们已经看到了控制器和视图,让我们连接一个数据库,看看我们如何使用模型与它交互。 从这里继续,假设您已经有一个可以使用的数据库,您知道它的访问凭据,并熟悉基本的MySQL命令。 如果没有,请查看本教程

为了连接我们的数据库,我们需要编辑,我们在之前的文章,位于公共/文件夹中的index.php文件中创建的引导文件:
nano /var/www/project_name/public/index.php

在此块下:
  //Setup a base URI so that all generated URIs include the "tutorial" folder
    $di->set('url', function(){
        $url = new \Phalcon\Mvc\Url();
        $url->setBaseUri('/project/');
        return $url;
    });

添加以下块:
  //Setup the database service
    $di->set('db', function(){
        return new \Phalcon\Db\Adapter\Pdo\Mysql(array(
            "host" => "localhost",
            "username" => "root",
            "password" => "password",
            "dbname" => "db-name"
        ));
    });

当然,在适当的时候替换您的数据库信息。 保存文件并退出。 接下来,创建一个托管您的第一个模型的表。 让我们把它叫做文章 ,并给它一个ID列,标题栏和一个身柱。 以下MySQL命令将为您创建它。
CREATE TABLE `articles` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `body` text NOT NULL,
  PRIMARY KEY (`id`)
);

现在让我们通过我们的命令行插入一行来玩。 你可以使用这个MySQL命令来做到:
INSERT INTO `articles` (title, body)  VALUES ('This is the first article', 'some article body');

现在,我们有一些内容,让我们来定义文章模型。 创建应用程序的应用程序/文件夹模式的PHP文件:
nano /var/www/project_name/app/models/Articles.php

并粘贴在里面(省略关闭php标签):
<?php

class Articles extends \Phalcon\Mvc\Model {

}

我们现在扩展Phalcon模型类,它为我们与模型数据交互提供了很多有用的功能。 另一个很酷的事情是,因为我们将该类命名为数据库表,所以这两个已经链接。 该模型将引用该数据库表。

现在我们需要做的是声明我们的模型属性(映射到表列)。 所以在类中,添加以下protected属性:
public $id;

public $title;

public $body;

接下来,我们需要一些setters / getter来从这些受保护的属性中检索或为其分配值。 在这里,我们可以有很多来控制如何访问数据。 但由于本教程不会考虑向数据库添加信息,因此我们将只添加一个getter函数来从属性中检索现有信息。 所以下面,但仍然在模型类中,添加以下方法:
public function getId()    {
    return $this->id;
}

public function getTitle()    {
    return $this->title;
}

public function getBody()    {
    return $this->body;
}

通常,你还需要setter函数。 让我们保存此文件,并回头对我们的IndexController。 在里面的indexAction,替换所有具有以下内容:
$article = Articles::findFirst(1);
$this->view->setVar("string", $article->getTitle());

在第一行中,我们使用来自我们扩大了我们文章的模型来检索与1. ID的文章Phalcon模型类的FindFirst方法然后在第二个,我们通过查看标题列的值,我们正在使用我们在模型中先前声明的getter函数来检索。 保存文件并重新载入浏览器。 你应该看到打印出第一篇文章的标题。

既然我们不能进入所有你可以用Phalcon模型类做什么,我建议你阅读更多关于它在这里 你会发现一些准备好的功能和数据库抽象,让你快速。

结论

在本教程中,我们已经看到了Phalcon如何自动加载视图,因为它们在项目文件夹结构中的位置以及如何将信息从控制器操作传递到相应的视图。 此外,我们设置了一个小的Phalcon模型,以了解我们如何与数据库表交互并检索信息。
文章提交者: 丹尼
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏