如何使用Lithium来创建Web应用程序

关于Lithium

Lithium是用于开发Web应用程序的全栈的PHP框架。基于模型 - 视图 - 控制器(MVC)架构,它是为PHP 5.3+构建的,并与诸如MongoDB或CouchDB之类的最新存储技术集成。 它旨在提供一个伟大的项目组织以及在开发您自己独特的Web应用程序时编写框架的可能性。此外,它有一个强大的插件系统,允许你使用你最喜欢的组件外部框架(如Twig模板或Doctrine2为ORM)。 在本教程中,我们将继续在我们离开之前,当我们 安装Lithium到我们的Ubuntu 12.04 VPS和配置为构建我们的Web应用程序所需的所有要求。如果你还记得,我们还连接了一个MySQL数据库,并有一个如何打印出“Hello World”到页面上的一瞥。接下来将介绍如何使用三个MVC组件(模型,视图和控制器)以及Lithium框架。

控制器

我们已经看到已经在行动了一个简单的控制器类 (HelloController中 )及其指数(即其默认)方法。我们将继续构建它来说明3个更多的MVC相关方面:
  • 使用其他控制器类方法以及它们如何与我们在浏览器中调用的URL相关
  • 从控制器传递信息,在视图中显示(这是相对于只直接从控制器方法echoING字符串的一个最佳实践)。
  • 创建模型以在数据库中表示我们的数据

路由

为了说明如何控制映射到我们需要在浏览器访问URL,让我们创建我们的 HelloController中的另一种方法:
public function goodbye() {
    echo "Goodbye!";
}
现在,当我们指出我们的浏览器到 your-ip/sites/hello/goodbye ,我们将看到印在屏幕上的字“再见”。 这是Lithium的defaul路由行为由我们传递的第一个URL参数是控制器的名称( 你好 < -注意缺少单词“控制器”)和第二个是方法的名称( 再见 ) 。 我们可以采取如果进一步,甚至传递一个参数到方法,如:
public function goodbye($name) {
    echo "Goodbye " . $name . '!';
}
然后,我们可以我们的浏览器指向 your-ip/sites/hello/goodbye/danny ,你会看到印有“再见丹尼!” 屏幕上。 所以这是非常方便和逻辑,工作类似于 。 这可能是简单的,它不能满足每个项目的需要。在这种情况下,您可以根据需要定义自定义路由规则和映射网址到控制器方法。了解 更多信息,在Lithium文档站点。

视图

正如我所说,MVC架构促进了逻辑与表现分离让我们看看我们如何使用Lithium视图来显示建于我们的信息 HelloController类。 让我们再回到 goodbye()我们在前面创建的方法,让我们假设我们需要我们传递给它(参数 $name在视图中打印出来)。 我们需要做的第一件事是让这个方法将变量传递给View。可以实现的一种方法是返回键和值的关联数组。因此,改变 goodbye()方法是这样的:
public function goodbye($name) {
    return array(
      'name' => $name,  
    );
}
如你所见,所有的方法都是返回一个包含变量(从URL传递)的数组。与该相关联的关键 $name变量将在视图,用于输出作为可变可用。 现在,让我们继续在app / views /文件夹中创建一个与控制器方法名称相同的View文件,并驻留在以控制器命名的文件夹中。所以在我们的情况下,它将(当在项目根文件夹):
nano app/views/hello/goodbye.html.php
在此文件内现在粘贴以下内容:
<h1>Goodbye <?=$name;?>!</h1>
现在,当您导航到上一个网址:
your-ip/sites/hello/goodbye/danny
您应该看到在标题标签之间如何 $name变量,我们从传递给控制器得到的,又传递给并查看打印。另一个很酷的事情是,值由Lithium自动逃脱。 你还会注意到,我们的视图注入到默认情况下使用Lithium的一个现有布局(顶部有一个小菜单等)。但对于有关使用视图和布局的更多信息,请检查 Lithium文档

楷模

看过我们如何路由请求和显示信息,让我们看看如何通过创建一个模型来表示它从数据库中获取信息。由于Lithium离子电池的使用寿命很长,我们不需要做很多事情,我们才能看到一些真棒的结果。 首先,确保你有数据库和一个表。我会打电话给我的新闻,它将有3列:id,标题和正文。另外,在这个表中填充一些虚拟内容,所以你有东西要玩。有关使用MySQL的更多信息,你可以阅读这个伟大的 教程上DigitalOcean。但不要忘记,使用Lithium您可以选择使用其他存储引擎。 要加快速度,可以通过运行以下命令在登录MySQL服务器后从命令行快速创建此表:
CREATE TABLE `news` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `body` text NOT NULL,
  PRIMARY KEY (`id`)
);
您还可以使用以下两个命令插入两个虚拟行:
INSERT INTO `news` (title, body)  VALUES ('This is the first news article', 'some article body');
INSERT INTO `news` (title, body)  VALUES ('This is other news', 'some more article body');
现在我们有了一些内容,让我们创建一个News.php文件来在app / models /文件夹中保存我们的模型类:
nano app/models/News.php
在里面,粘贴以下内容:
<?php

namespace app\models;

class News extends \lithium\data\Model {
}

?>
现在,这就是我们在这个文件中需要的。我们扩展的基类提供了大量的方法,可以用来与我们的数据进行交互。 回到我们 HelloController类中添加以下行类声明之上:
use app\models\News;
现在让我们在类中添加另一个方法:
public function news($id) {
    $news = News::first(array(
      'conditions' => array('id' => $id)
    ));
    return array(
      'news' => $news->data()  
    );
  }
此方法从URL(新闻ID)获取参数,检索具有该ID的新闻,并将结果传递到视图。它使用Lithium模型基类做使用查询 find()方法,而数据,然后在得到的对象使用所访问的 data()方法。现在让我们创建视图来显示新闻文章:
nano app/views/hello/news.html.php
并粘贴以下内容:
<h1><?=$news['title'];?></h1>
<p><?=$news['body'];?></p>
进行这些更改时,请确保在配置文件中具有正确的MySQL凭据:
nano /var/www/site/app/config/bootstrap/connections.php
正如你所看到的, $news变量与表列的名字命名的键的数组。整齐。现在将您的浏览器指向以下网址:
your-ip/site/hello/news/1
你应该看到第一篇新闻文章。通过 2作为最后一个参数,你应该看到第二个新闻文章等更详细的信息有关使用Lithium模型,读取相应的文档 在这里

结论

在本教程中,我们讨论了一下Lithium,了解基本路由系统的工作原理,以及如何将URL转换为控制器请求。此外,我们已经了解了如何使用视图来显示从控制器传递的信息,以及如何使用模型集成我们的数据库信息。
文章提交者: 丹尼
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

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

支付宝扫一扫打赏

微信扫一扫打赏