Akelos

Akelos 入门

介绍

我的妻子在Linux和PHP编程方面是一个初学者。他从来没有用过Akelos。她对MVC编程毫不理解。他要求我教她。他学习的方法是我给他上课,她非常详细的记录它们。一个丈夫给妻子上课是一本不寻常的是,所以我也不会失去这个机会。

同样的资料可以在tutorial找到. booklink tutorial上的资料有些部分稍微短一些。这的第一项目是显示一个静态页面, 这是我妻子想做的。当项目被建立之后,在项目的doc目录下也用同样的booklink tutorial列表。

Why use Akelos?

第一个问题是我们为什么要使用Akelos,任何一个程序员都知道一个计算机程序可以用很多语言来实现。变量的名字也是我穷尽的。也有很多nitty-gritty details,可以写出程序,特别是图形环境。也有有趣的部分来编程。我们想要的是,一个代码生成器会给我不生成一些无用的代码,只留下有趣的部分。这也使得我们的生产力更高。我们应该做的是,比如测试,事实上我们不经常做,因为包含了额外的工作。其他人写的程序我们可以使用,但是我们想非常容易的把他们的代码整合到我们的项目中。Akelos将会做到这些而且更多,但是不会影响性能。然而,他做这些,是要付钱的。

他的价钱是我们必须放弃我们的使用旧的方法生成代码的权力。我们使用了”习惯大于配置”的原则,因此我们了解并且根据他的原则来写代码。她使得我们更容易的包含其他人的代码,如同在我们的代码中创建一致性一样。我们必须作的一件事是我们使用MVC来编码。

Model View Controller (MVC)

当我们运行Akelos程序时,Akelso软件是我们的工具,是当他运行时我们项目的通讯工具。Akelos需要知道到哪去寻找。意思是我们的代码走到哪依赖于他做什么。这样使得我们更容易测试和维护。我们的项目不仅仅包含整块的代码,还有一些大文件,但是许多是小文件。

Akelos被设计成访问数据库(model), 处理数据(controller),将数据显示给用户,接收用户的输入(view)并且处理他(controller).下面的笔记并没有给出详细的解释,只是简单的介绍。

Model

这是数据模块. 在app/models目录下.这里定义了数据表和他们之间的关系。模块也告诉我们一个表的样子:一个列表,一个树,一个嵌套设置。编辑他确保没有垃圾写到这里。

Controller

有很多被称为项目逻辑的controllers。controller描述了数据是怎样被处理的。在app/controllers编写它.一个controller类,像其他类一样,有很多函数。每一个函数对应一个网页。这里也有一些函数不访问网页。访问函数的页面在被显示之前也许就被实行了。如果用户这页面上数据了数据,函数也许处理这个结果。

View

iews,在app/views (另一个惊喜)对应于每一个controller有一个子目录。在子目录中为每一个页面生成一个模板文件。模板文件?用HTML和PHP书写整个页面是没有意义的。有一个layout文件,每一个页面都可以使用他。模板文件包含form和表单有一个捷径,就像数据循环一样。Akelos使用他们生成PHP文件来实际生成页面。

我们将要做什么

我们开始安装Akelos,然后创建项目。因为我的妻子一步一步的进行,我们将停一会,我的妻子会按我教的去做。

我大概会贯穿他开始的几个项目,并且在这里作一下笔记。我们会根据需要更新WIKI。

这个部分的很多东西是重复的,在其他的地方也能看到。我是从初学者的角度来写的。其他的教程给出了几种方法来做。我们只使用最简单的方法来做。

我也许添加LAMP system (Linux, Apache, MySQL, PHP).他的Linux是Fedora 9.在他的/home/目录下有一个php的目录。

许多教程是在终端来执行的。这些教程开始于

$ 

这是user提示符. 当你切换到root,提示符是

# 

.

Things to do before creating your first Akelos project

妻子的第一个项目

介绍

他的项目名为im,内容是网上购物Internet Marketing. Akelos可以通过数据库接口来创建和维护动态网页。第一个项目不会使用到所有Akelso的特性,对我妻子来说只需要一个静态的网页,但是需要融合到Akelso项目中,并且包含一些动态的特性,所以她想尽可能的使用Akelos的特性,还有就是她有静态页面的开发经验。

创建数据库

哦,等一下。这个项目只有一个静态项目。为什么需要静态页面呢?我们需要它是因为Akelos为他们而设计,并且需要他们。我们用不到数据库。因此我们也不用发费时间和精力来学习为什么有这三个数据库和每一个是什么。下面跟着我做就可以了,当你在终端输入如下命令事,Mysql会询问你密码:

$ mysql -u root -p

mysql> CREATE DATABASE im;
mysql> CREATE DATABASE im_dev;
mysql> CREATE DATABASE im_tests;

mysql> GRANT ALL ON im.* TO bermi@localhost IDENTIFIED BY "pass";
mysql> GRANT ALL ON im_dev.* TO bermi@localhost IDENTIFIED BY "pass";
mysql> GRANT ALL ON im_tests.* TO bermi@localhost IDENTIFIED BY "pass";

mysql> FLUSH PRIVILEGES;
mysql> exit

Creating the project

$ cd ~/php
$ akelos/script/setup im

im目录下会生成很多文件。最后一个设定是使项目可以在浏览器上运行。我们现不做那些。我们需要首先作如下几件事情。我们将改变项目的路径并且把set_apache拷贝到项目中。

set_apache

$ cd im
$ cp ~/bin/set_apache .

当我们创建set_apache的时候他已经是可执行的了,所以他的拷贝也应该是可执行的。如果不是可执行的话,你可以改变他的执行权限。:

$ chmod u+x set_apache

Now, we'll run it:

$ sudo ./set_apache

如果我们运行项目,想尝试编辑由Apache创建的本地文件事,我们不能保存所作的更改,执行set_apache是我们能够保存。

使Apache能访问我们的项目

我们必须从http document root目录下创建一个链接, im,到我们的项目的public目录,这样才能使我们的浏览器执行我们的项目。我妻子的document root是/var/www/html.

$ sudo ln -s ~/im/public /var/www/html/im

我为什么要用~/im/public,当我能使用. (dot)?因为我不想链接到dot,这就是原因.我想明确的指定我想指定到哪,所以我这么做了。

如果你在浏览器中执行项目时,我们将会被询问

  • database connection information.
  • language codes for multi-lingual projects

在配置文件中的密码是我们在数据库中设定权限的密码。我的妻子知道剩下的信息该如何填写,所以我就继续往下进行。

编辑我们项目的文件

我们创建了我们项目的索引,在我们的实例中是~/php/im.

不需要的文件

当我们查询字符串的时候,我们会得到我们不需要的结果和对我来说没有太大意义的结果。我们可以删除他们或者从项目的root目录中移除。或者更安全一些,也许我们从那里能找到一些我们可用的代码。

docs目录下有不能语言的知道手册。我的妻子可以删除所有的只留下一个他需要的。

  • tutorial-fr.markdown
  • tutorial-es.markdown
  • tutorial-ja.markdown

因为不仅是一个English speaker,还是一个Linux user,他可以删除

  • windows_set_php_path-es.markdown.

我从项目文件中删除了page ,但是我不认为在项目设定之后还需要它。他们也许是便于参考。:

$ rm -f app/views/layouts/compiled/page.tpl.php
$ rm -f app/views/layouts/page.tpl
$ rm -rf app/views/page/
$ rm -rf app/locales/page/

编辑routes文件

$ gedit config/routes.php

Akelos将会读取浏览器的URL和routes.php文件,然后会执行命令的controller中当前的function (action).这个文件关联到page controller,那个我们不想用的控制器.我们将创建一个用于 electric power filter的控制器,所以我们创建的控制器的名字是pwr_fltr.在routes.php文件中的代码是相当的复杂。但是对于初学者来说我们只需要两行,我得妻子将用”pwr_fltr”代替”page”。

编写项目

创建一个controller

在项目的根目录

$ ./script/generate controller pwr_fltr

创建一个scaffold

A scaffold is view code that is generated from the model and the controller. It doesn't need to be generated, but it may be easier to modify the generated code than to write view code from scratch, especially when you're not familiar with Akelos.

$ ./script/generate scaffold pwr_fltr

因为我们没有创建一个model来访问数据库,一些scaffold文件没有被创建,但是这个没问题。我的妻子很聪明。他可以使他做的运行起来。

pwr_fltr Controller

在她喜爱的编辑器中,我得妻子可以打开app/controller/pwr_fltr_controller.php.里面有一个PHP class,除此之外没有别的。她将为这个页面起个名字,为了文档的简捷,我们叫他”ad”,对于”advertisement”.他将会输入如下代码在这个类文件中

function index()
{
    $this->redirectTo(array('action' => 'ad'));
}
 
function ad()
{
}

这事做什么呢?routes.php文件将会导向到controller的index函数.因为只有一个也页面,所以我们不需要菜单之类的。我们将会告诉项目跳转到ad function.但是这个函数是空的,不哟用担心,他意味着没有数据处理,在显示页面之前和之后都是一样的。他是一个静态的页面。

Wife, save the file.

The pwr_filter View Layout

First, wife, create a pwr_fltr layout file. If she'd had a model, it would have been generated for her. In a new file put this code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title><?php  echo $text_helper->translate('Power Filter',array(),'layout');?>:
    <?php  echo  $text_helper->translate($controller->getActionName(),array(),'layout');?>
  </title>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  <?php  echo  $asset_tag_helper->stylesheet_link_tag('scaffold') ?>
 </head>
 <body>
 {?flash-notice}<div class="flash_notice">{flash-notice}</div>{end}
  <?php  echo  $content_for_layout ?>
 </body>
</html>

Hey! It works. I'll give you the details of what the code is and what it does later. If you're too impatient, more information on flash is here.

The pwr_filter View Page

Create a new page and save it as app/views/pwr_fltr/ad.tpl. Remember the function ad in the controller? Akelos will use it to cause this page to be displayed. The contents of this file should be what you'd put in the body of the HTML page.

The Scaffold CSS file

This file is in public/stylesheets/scaffold.css. It will run as it is, but, of course, it may be changed.

Test the Project

Just put the project's URL in your browser and go. http://host.name.com/im Using my host name, it ran fine. I don't know what your problem is. Yes, I know. It's my fault. Let's just find out what's wrong and fix it.

Notice: Not Done Yet

Well, the first project is done. We'll have other projects that will use more of Akelos' features.

 
akelos-for-dummies_cn.txt · Last modified: 2009/05/31 05:36 by liyh
 

The Akelos Framework was created by Bermi Ferrer and other contributors.
Potions of the code and documentation have been ported from Ruby on Rails.

The Akelos Framework is released under the LGPL license.

"Akelos", "Akelos Framework", and the Akelos logo are trademarks of Bermi Labs All rights reserved.

Wiki driven by DokuWiki