主页 > 知识库 > 网络编程 > PHP >

PHP

教程: 让我们通过例子学习Phalcon(2)

来源:CIT信息网 作者:CIT小乐乐 发表于:2012-08-26 12:11  点击:
上一篇我们简单了介绍了 Phalcon 的安装和基本的目录结构,接下来我们将要详细介绍如何通过 Phalcon 来创建控制器和视图等。 发送输出到视图 Sending output on the screen from the controller is at times necessary but not desirable as most purists in

上一篇我们简单了介绍了Phalcon的安装和基本的目录结构,接下来我们将要详细介绍如何通过Phalcon来创建控制器和视图等。

发送输出到视图

Sending output on the screen from the controller is at times necessary but not desirable as most purists in the MVC community will attest. Everything must be passed to the view which is responsible for outputting data on screen. Phalcon 将会在控制器方法最后执行完毕后查找同名的视图文件。 在这个例子里(app/views/index/index.phtml)

 

<?php echo "<h1>Hello!</h1>";

我们的控制器(app/controllers/IndexController.php)现在我们有一个空的action方法被定义。

 

<?php
class IndexController extends Phalcon_Controller
{
   function indexAction()
   {
   }
}

浏览器输出应该是相同的。这个Phalcon_View静态组件将在创建的action方法执行完毕后自动执行。了解更多关于视图的使用在这里:http://docs.phalconphp.com/en/latest/reference/views.html

设计一个注册表单

现在我们需要修改index.phtml视图文件,来增加一个新的控制器,名为“signup”,然后这个允许用户在应用中通过这个来注册:

 

<?php
echo "<h1>Hello!</h1>";
echo Phalcon_Tag::linkTo("signup", "Sign Up Here!");
这个将会生成HTML代码:
<h1>Hello!</h1> <a href="/test/signup" >Sign Up Here!</a>

生成标签我们用到了Phalcon_Tag(http://docs.phalconphp.com/en/latest/api/Phalcon_Tag.html),这是一个实用程序类,它允许我们构建HTML标签与框架公约在心里。一个更详细的文章关于HTML生成可以在这里找到:http://docs.phalconphp.com/en/latest/reference/tags.html

../_images/tutorial-2.png

这里是我们的控制器代码app/controllers/SignupController.php:

 

<?php
class SignupController extends Phalcon_Controller
{
   function indexAction()
   {
   }
}

这个空操作中我们将在视图中定义一个表单:

 

<h2>Sign using this form</h2>
<?= Phalcon_Tag::form("signup/register") ?>
<p>
   <label for="name">Name</label>
   <?= Phalcon_Tag::textField("name") ?>
</p>
<p>
   <label for="name">E-Mail</label>
   <?= Phalcon_Tag::textField("email") ?>
</p>
<p>
   <?= Phalcon_Tag::submitButton("Register") ?>
</p>
</form>

注意:如果你的php.ini中short_open_tag = Off ,你可以修改视图如下:

 

<h2>Sign using this form</h2>
<?php echo Phalcon_Tag::form("signup/register"); ?>
<p>
   <label for="name">Name</label>
   <?php echo Phalcon_Tag::textField("name"); ?>
</p>
<p>
   <label for="name">E-Mail</label>
   <?php echo Phalcon_Tag::textField("email"); ?>
</p>
<p>
   <?php echo Phalcon_Tag::submitButton("Register"); ?>
</p>
</form>

在浏览器中查看表单就会看到下面的样子:

../_images/tutorial-3.png

Phalcon_Tag 同样支持构建表单元素的一些方法。

Phalcon_Tag::form方法接受只有一个变量,这个变量就是将表单请求给应用中的controller/action

我们点击“send”按钮,这里框架将会抛出一个异常,因为我们这里控制器 “signup”中没有“register”操作,这个错误是由public/index.php文件抛出的:

PhalconException: Action “register” was not found on controller “signup”

这里我们需要定义下列方法来删除错误:

 

<?php
class SignupController extends Phalcon_Controller
{
   function indexAction()
   {
   }
   function registerAction()
   {
   }
}

再点击“send”按钮时候,这里就是一个空白页了,这里表单提供用户的name和email需要存储到数据库,通过MVC的数据库结构,我们可以将数据进行存储。

创建模型

Phalcon绑定了第一个用C语言开发的PHP的ORM,这样让开发变得给长简单。

在创建模型之前,我们需要创建一个数据库,这个数据库用来存储用户的相关信息:

 

CREATE TABLE `users` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(70) NOT NULL,
 `email` varchar(70) NOT NULL,
 PRIMARY KEY (`id`)
);

模型需要创建在app/models目录中,模型将会映射到 “users”表:

 

<?php
class Users extends Phalcon_Model_Base
{
}

设置数据库连接

在通过模型请求数据库之前,我们需要确保数据库正常的连接,我们需要在框架启动的时候设定数据库相关配置,Phalcon_Controller_Front配置在一开始就需要被载入,例如:

 

<?php
try {
   $front = Phalcon_Controller_Front::getInstance();
   //Setting up framework config
   $config = new Phalcon_Config(
       array(
           "database" => array(
               "adapter"  => "Mysql",
               "host"     => "localhost",
               "username" => "scott",
               "password" => "cheetah",
               "name"     => "test_db",
               ),
           "phalcon" => array(
               "controllersDir" => "../app/controllers/",
               "modelsDir"      => "../app/models/",
               "viewsDir"       => "../app/views/",
           )
       )
   );
   $front->setConfig($config);
   //Printing view output
   echo $front->dispatchLoop()->getContent();
} catch(Phalcon_Exception $e) {
   echo "PhalconException: ", $e->getMessage();
}

你会注意到,我们这里取代了在控制器调用setControllersDir, setModelsDir and setViewsDir,将他放到一个配置的数组中去,通过这样让我们看上去更加简单了。

Phalcon_Config对象的使用,可以保持一些基本信息以应用程序,可以存储为一个数组在一个不同的文件或作为一个INI文件。

正确的数据库参数,我们的模型是准备工作和与应用程序的其余部分。

通过模型存储数据

接收到表单传递的数据,我们接下来需要将他们存储到数据库中去:

 

<?php
class SignupController extends Phalcon_Controller
{
   function indexAction()
   {
   }
   function registerAction()
   {
       //Request variables from html form
       $name = $this->request->getPost("name", "string");
       $email = $this->request->getPost("email", "email");
       $user = new Users();
       $user->name = $name;
       $user->email = $email;
       //Store and check for errors
       if ($user->save() == true) {
           echo "Thanks for register!";
       } else {
           echo "Sorry, the next problems was generated: ";
           foreach ($user->getMessages() as $message) {
               echo $message->getMessage(), "<br/>";
           }
       }
   }
}

我们永远不能信任用户发送的数据,在用户数据发送到控制器中进行处理的时候,我们需要一个过滤器,这里我们需要看validate/sanizite(http://docs.phalconphp.com/en/latest/reference/filter.html)相关的内容,这么操作是为了防止SQL注入,在这里用户的name被定义为string意味着传递的名字不能包含特殊字符,组件Phalcon_Filter(http://docs.phalconphp.com/en/latest/api/Phalcon_Filter.html)处理这个琐碎的任务,因为它是纳入getPost调用。

然后实例化用户类,它对应于一个用户记录。公共属性的类的字段映射到用户表中的记录。设置相关的值的新记录和调用save()将数据存储在数据库的记录。save()方法返回一个布尔值,它告诉我们是否存储的数据是成功与否。

额外的验证发生自动字段不为空(必需)。如果我们不输入任何所需的文件我们的屏幕将会看起来像这样:

../_images/tutorial-4.png

结论

这是一个非常简单的教程,正如你所看到的,使用Phalcon很容易开始构建一个应用程序。这一事实是一个扩展你Phalcon web服务器没有干扰的开发简便性或特性。我们邀请你继续阅读手册,这样你会发现附加功能提供Phalcon !

CIT原创翻译 | http://www.cit.cn/tech/develop/php/2012/0826/7891.html

    有帮助
    (2)
    100%
    没帮助
    (0)
    0%