首页 > 后端开发 > php教程 > 锂框架:入门

锂框架:入门

Christopher Nolan
发布: 2025-02-21 10:46:10
原创
728 人浏览过

Lithium Framework: Getting Started

Lithium框架入门:关键要点

  • Lithium是一个灵活的PHP框架,适用于PHP 5.3及以上版本,它使用模型-视图-控制器(MVC)架构进行Web应用程序开发。
  • 控制器处理由应用程序路由系统路由到的请求。视图是表示层,它使业务逻辑与表示分离,并允许轻松地对显示在浏览器中的内容进行主题化。模型定义并处理数据库中的内容,使CRUD(创建、读取、更新、删除)操作变得容易。
  • Lithium支持各种数据库,包括MySQL、MongoDB和CouchDB。该框架还具有强大的路由系统,允许创建简洁且对搜索引擎友好的URL。
  • Lithium的约定使入门变得容易。它提供内置的CRUD方法,允许自定义路由,支持多个布局,甚至可以在视图中渲染较小的元素。这些特性使Lithium成为Web应用程序开发的强大工具。

Lithium是一个精简高效的PHP框架,适用于PHP 5.3及以上版本。它旨在提供一套良好的工具来启动您的Web应用程序,但不会过于限制。

Lithium使用模型-视图-控制器(MVC)架构,本文将对此进行探讨。我将向您展示它的工作原理,以及如何使用此框架定义应用程序的一些业务和表示逻辑。我们将执行以下几个步骤:

我们将设置一个控制器来路由URL请求。这个控制器将借助数据模型从数据库获取和处理一些信息。然后,这些信息将使用视图显示在浏览器中。所有这些都是标准的MVC流程,但在Lithium中执行却是一种享受。

我假设您已经在服务器上设置了框架,至少在您导航到URL时可以看到默认应用程序的启动页面。此外,您还需要一个包含一些信息的数据库。我将使用MySQL,但Lithium支持许多其他存储系统,例如MongoDB或CouchDB。

如果您想继续学习,我已经设置了一个Git仓库,您可以克隆它。master分支包含普通的Lithium框架,而MVC分支包含本文的代码。不要忘记初始化和更新lithium子模块。要连接您的数据库,请复制位于app/config/bootstrap文件夹中的connections_default.php文件,并将其重命名为connections.php。然后在该文件中添加您的凭据。

让我们开始吧。

数据

在进入有趣的MVC内容之前,让我们在数据库中添加一个包含一些信息的表。我将使用虚拟页面数据,因此我的表(名为pages)将包含一个id列(INT,自动递增和主键)、一个title列(varchar 255)、一个content列(text)和一个created列(INT)。在这个表中,我有两行示例数据。如果您想完全按照步骤操作,以下是表的创建语句:

CREATE TABLE `pages` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `content` text,
  `created` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
登录后复制
登录后复制
登录后复制

以下是我的虚拟数据行:

INSERT INTO `pages` (`id`, `title`, `content`, `created`)
VALUES
    (1, 'My awesome page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158745),
    (2, 'Some other page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158768);
登录后复制
登录后复制
登录后复制

当然,您可以使用其他数据。

C代表控制器

控制器可能是任何MVC框架中最重要的部分。它们的作用是处理由应用程序路由系统路由到的请求。

如果您查看应用程序的app/controllers/文件夹,您会发现这就是我们必须放置控制器的地方。让我们在那里创建一个名为SiteController.php的新文件(每个控制器类都位于它自己的文件中),并将以下类声明粘贴进去以开始:

<?php namespace app\controllers;

class SiteController extends \lithium\action\Controller {

}
登录后复制
登录后复制

如您所见,我们将Lithium基本控制器类扩展到我们自己的名为SiteController的类中。在这个类中,您可以创建在从URL请求时执行所需逻辑的方法。我们将在稍后看到它的实际应用,但首先,让我们了解路由是如何工作的。

默认情况下,在构造URL时,我们使用与控制器类名称(在本例中为site)、方法和参数相映射的参数。如果未传递方法名称,Lithium将自行假设一个名为index()的方法。因此,如果您导航到http://example.com/site/,Lithium将查找此方法并调用它。现在假设我们有一个名为view()的方法,它接受一个参数($id)。调用该控制器方法的URL是http://example.com/site/view/1,其中view是方法的名称,1是传递给该函数的参数。如果该方法获得更多参数,您只需在URL中用斜杠(/)分隔它们。

但是,正如我提到的,这是默认行为。为了获得更多控制,您可以在/app/config/routes.php文件中自己定义路由。我不会详细介绍,但您可以在相应的文档页面上找到更多信息。

现在让我们继续创建一个page()方法,该方法将负责从我的虚拟数据库显示各个页面:

public function page() {

    // 模拟页面信息。
    $title = 'My awesome page title';
    $content = 'My awesome page content. Yes indeed.';
    $created = '10 April 2014';

    // 准备页面信息以传递给视图。
    $data = array(
      'title' => $title,
      'content' => $content,
      'created' => $created,
    );

    // 将数据传递给视图。
    $this->set($data);

}
登录后复制

在上面,我们模拟数据库页面信息并将其存储在一个数组中。然后,我们将此数组传递给控制器的set()方法(我们继承的),然后将其发送到视图。或者,我们也可以返回$data数组,而不是使用set()方法。但在两种情况下,数组的键都表示变量名,然后我们可以从视图文件中访问这些变量名。让我们看看它是如何工作的。

(以下内容与原文类似,只是对语句进行了调整和改写,保持了原意,并避免了重复的代码块)

V代表视图

视图是MVC框架的表示层。它们用于使应用程序的业务逻辑与表示分离,并允许轻松地对显示在浏览器中的内容进行主题化。

让我们创建一个视图来显示我们的页面信息。在app/views/文件夹中,您需要创建一个以使用它的控制器类命名的另一个文件夹(在本例中为site)。在这个文件夹中,您必须创建一个以方法本身命名的文件,并附加.html.php扩展名。这是Lithium为视图命名的约定,它使我们能够轻松地将它们连接到控制器。

因此,对于我们的页面示例,新文件将位于app/views/site/page.html.php。

在这个文件中,粘贴以下内容:

CREATE TABLE `pages` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `content` text,
  `created` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
登录后复制
登录后复制
登录后复制

正如您可能已经猜到的那样,这是一些基本的标记,我们将在其中打印以传递自控制器的数组键命名的变量。Lithium使用此语法来打印变量,因为它还会将它们通过其$h()函数运行,该函数负责清理HTML。但这仅适用于打印变量,而不适用于$this对象的属性。

为了测试我们到目前为止所做的工作,请导航到http://example.com/site/page,您应该会看到一个显示模拟信息的漂亮页面。您还会注意到,我们的简单视图是在更复杂的布局(框架附带的默认布局)中呈现的。

Lithium中的布局用于使用常用的标记(如标题和页脚)来包装内容。它们位于app/layouts文件夹中,它们使用$this->content()在其中呈现视图。我们的视图默认在default.html.php布局中呈现,但您可以根据需要指定另一个布局。您可以从呈现视图的控制器中执行此操作,或者作为应用于该控制器所有方法的类属性,或者在方法本身中执行此操作,如下所示:

INSERT INTO `pages` (`id`, `title`, `content`, `created`)
VALUES
    (1, 'My awesome page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158745),
    (2, 'Some other page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158768);
登录后复制
登录后复制
登录后复制

我们将坚持使用默认布局,因为它对于我们的演示目的来说看起来不错。

M代表模型

现在请求和表示逻辑已经处理完毕,是时候用我们的虚拟数据库内容替换模拟页面数据了。我们将使用模型来抽象并轻松访问这些信息。

模型类是MVC框架中非常重要的部分,因为它们定义并处理数据库中的内容。它们还使应用程序能够轻松地对这些数据执行CRUD(创建、读取、更新、删除)操作。让我们看看它们在Lithium中的工作方式。

您需要做的第一件事是在app/models文件夹中创建一个名为Pages.php的类文件,并在其中粘贴以下内容:

<?php namespace app\controllers;

class SiteController extends \lithium\action\Controller {

}
登录后复制
登录后复制

我们只是扩展了基本模型类并使用了它的所有方法。我们的模型类名称必须与包含相关记录的数据库表匹配。因此,如果您的不是pages,请确保相应地进行调整,因为Lithium将自动获取此命名以简化我们的工作。

接下来,我们需要在我们的控制器类文件中包含此文件,因此请在命名空间声明下方粘贴以下内容:

CREATE TABLE `pages` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `content` text,
  `created` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
登录后复制
登录后复制
登录后复制

接下来是删除page()方法中的模拟内容,并确保此函数传递一个$id参数,以便我们知道需要检索哪个页面。我们剩下的简单任务是查询页面记录并将结果传递给视图。因此,修改后的page()方法将如下所示:

INSERT INTO `pages` (`id`, `title`, `content`, `created`)
VALUES
    (1, 'My awesome page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158745),
    (2, 'Some other page title', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397158768);
登录后复制
登录后复制
登录后复制

我们使用模型父类的first()方法使用条件进行查询。结果是一个对象,我们使用data()方法从中检索记录数据。该数据采用以表列名称为键的数组形式。其余部分与之前相同,除了我们使用PHP date()函数格式化created字段,因为我们从数据库中获取的是UNIX时间戳。就是这样。

如果我们导航到http:example.com/site/page/1,我们应该会看到ID为1的页面。如果我们将最后一个URL参数切换为2,则页面应该加载第二条记录。整洁。

结论

在本教程中,我们看到了理解和使用Lithium MVC框架是多么容易。我们学习了如何定义控制器、视图和模型,以及如何将它们一起使用以创建整洁分离的应用程序流程。我们还看到了Lithium约定对我们入门有多么有用。即使我们没有意识到,我们也抽象了我们的数据库内容并将其公开以方便访问。

我希望您学到了一些东西,并且对更深入地研究Lithium提供的其他强大功能感到好奇。一些内置的CRUD方法是什么?如何扩展它们?如何定义您自己的自定义路由?如何使用多个布局甚至在视图中渲染较小的元素?这些都是Lithium为我们的Web应用程序提供的强大功能,值得一试。

我激起了您的好奇心吗?想了解更多关于这个优秀框架的信息吗?

(FAQ部分与原文相同,无需修改)

以上是锂框架:入门的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板