如何使用 Lithium 创建网络应用程序

金钱(警告)

** 状态:** 被贬值

如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:

** 原因:** Ubuntu 12.04 已于 2017 年 4 月 28 日到期(EOL)并且不再收到安全补丁或更新。

** 相反,请参阅:** 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本撰写的指南。

关于锂


Lithium是一套完整的PHP框架,用于开发Web应用程序,基于模型视图控制器(MVC)架构,用于PHP 5.3+,并与MongoDB或CouchDB等最新存储技术集成。

它旨在提供一个伟大的项目组织,以及在开发自己的独特Web应用程序时将框架编码出来的可能性,此外,它还具有强大的插件系统,允许您从框架外部使用您最喜欢的组件(如TWIG用于模板或Doctrine2 for ORM)。

在本教程中,我们将继续前面我们在Ubuntu 12.04 VPS上安装Lithium时的位置(https://www.digitalocean.com/community/articles/how-to-install-and-start-using-lithium-on-ubuntu-12-04-vps),并配置了构建我们的Web应用程序所需的所有要求。如果你记得,我们还连接了一个MySQL数据库,并对如何在页面上打印Hello World的见解。

控制者


我们已经在行动中看到一个简单的控制器类(HelloController)及其索引(即默认)方法,我们将继续建立它来说明3个MVC相关的方面:

  • 使用其他控制器类方法以及它们如何与我们在浏览器中呼叫的 URL 相关联 * 传输控制器信息以显示在视图中(这是最好的做法,而不是仅仅是 echo-ing 字符串直接从控制器方法)。

路线


为了说明控制器如何地图到我们需要在浏览器中访问的URL,让我们在我们的 HelloController 中创建另一种方法:

1public function goodbye() {
2    echo "Goodbye!";
3}

现在,当我们将我们的浏览器指向your-ip/sites/hello/goodbye,我们会看到屏幕上打印的Goodbye一词,这是Lithium的默认路由行为,我们通过的第一个URL参数是控制器的名称(Hello <-注意缺少Controller一词),第二个是方法的名称(goodbye)。

我们可以进一步采取,甚至将参数传递到方法如下:

1public function goodbye($name) {
2    echo "Goodbye " . $name . '!';
3}

然后我们可以将我们的浏览器指向 your-ip/sites/hello/goodbye/danny,你会看到屏幕上打印的Goodbye danny!所以它非常方便和逻辑,工作类似于 CodeIgniter

虽然这很简单,但它并不能满足每个项目的需求,在这种情况下,您可以根据自己的意愿定义自定义路由规则和地图 URL 到控制器方法。

观点


正如我所提到的,MVC架构促进了逻辑与演示的分离,所以让我们看看我们如何使用锂视图来显示我们在HelloController类内构建的信息。

我们需要做的第一件事是让这种方法将变量传递到视图中。可以做到这一点的方法之一是返回一个关联数组的键和值。

1public function goodbye($name) {
2    return array(
3      'name' => $name,  
4    );
5}

正如您所看到的,该方法只会返回包含变量(从 URL 传输)的数组,与$name变量相关的密钥将在视图中作为变量输出。

现在,让我们继续创建一个在应用程序 / 视图 / 文件夹中具有与控制器方法相同的名称的视图文件,并居住在一个名为控制器的文件夹中。

1nano app/views/hello/goodbye.html.php

现在,在这个文件里面插入以下内容:

1<h1>Goodbye <?=$name;?>!</h1>

现在,当您导航到前一个URL时:

1your-ip/sites/hello/goodbye/danny

您应该在标题标签之间看到我们从传输到控制器中获得的$name变量,反过来又被视图传输并打印出来。

您还会注意到我们的视图被注入到现有布局中,该布局默认情况下包含锂(顶部有一个小菜单等)。

模型


看到我们如何路由请求和显示信息,让我们看看我们如何从我们的数据库中获取信息,通过创建一个模型来代表它。

首先,请确保你有数据库和表。我会打电话给我的新闻,它将有3个列:id,标题和身体. 此外,用一些愚蠢的内容填充这个表,以便你可以玩一些东西。 有关与MySQL合作的更多信息,你可以阅读这个伟大的教程(https://www.digitalocean.com/community/articles/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu)在DigitalOcean上。

要加快工作速度,您可以快速从命令行创建此表,然后登录到您的MySQL服务器,运行此命令:

1CREATE TABLE `news` (
2  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
3  `title` varchar(255) NOT NULL,
4  `body` text NOT NULL,
5  PRIMARY KEY (`id`)
6);

您还可以使用以下两个命令插入两行愚蠢的行:

1INSERT INTO `news` (title, body)  VALUES ('This is the first news article', 'some article body');
2INSERT INTO `news` (title, body)  VALUES ('This is other news', 'some more article body');

现在我们有一些内容,让我们创建一个 News.php 文件,以保持我们的模型类在应用程序 / 模型 / 文件夹:

1nano app/models/News.php

在里面,贴上以下内容:

1<?php
2
3namespace app\models;

类 新闻延伸 \lithium\data\Model { }

?>

目前,这就是我们在这个文件中所需要的一切。

回到我们的HelloController类,在类声明上方添加以下行:

1use app\models\News;

现在让我们在课堂内添加另一种方法:

1public function news($id) {
2    $news = News::first(array(
3      'conditions' => array('id' => $id)
4    ));
5    return array(
6      'news' => $news->data()  
7    );
8  }

该方法从URL(新闻ID)中取出参数,以该ID获取新闻,并将结果传送到视图中。它使用锂模型基类来使用find()方法执行查询,然后使用data()方法访问结果对象中的数据。

1nano app/views/hello/news.html.php

然后粘贴下列:

1<h1><?=$news['title'];?></h1>
2<p><?=$news['body'];?></p>

进行这些更改时,请确保配置文件中有正确的 MySQL 凭证:

1nano /var/www/site/app/config/bootstrap/connections.php

正如你所看到的,$news变量是以表列命名的键组成的数组。

1your-ip/site/hello/news/1

2作为最后的论点,你应该看到第二篇新闻文章等 有关使用锂模型的更详细信息,请阅读相应的文件 这里

结论


在本教程中,我们已经玩了一些Lithium,学习了基本路由系统的运作方式,以及URL如何被翻译成控制器请求。

Article Submitted by: Danny
Published At
Categories with 技术
comments powered by Disqus