-
下载Solar系统压缩包,你可以从这里下载。
-
把系统包解压到网站根目录(例如:/var/www/htdocs 或 /etc/apache2/sites/default),在本示例中我们把该目录叫SYSTEM
Warning 请注意,这种做法是很不安全的;在实际项目中,你应该把系统包解压到网站根目录之外,通过建立虚拟主机来指向SYSTEM/docroot目录
-
进入SYSTEM目录,你应该会看到类似下面这样的文件目录:
$ cd SYSTEM $ ls -1F README config/ config.php docroot/ include/ index.php script/ source/ sqlite/ tmp/ $
-
更改tmp/和sqlite/目录的权限,以使web服务器对其具有可写权限
$ chmod -R 777 sqlite/ tmp/ $
Warning 请注意,对这些目录使用最大读/写权限是不安全的。在实际项目中,你应该把sqlite/和tmp/的所有者改为web服务器。
-
现在你可以浏览http://localhost/index.php 并且可以看到Hello World!消息
-
下载Solar系统压缩包,你可以从这里下载。
-
把系统包解压到
/solarlatest
目录下,在本示例中我们把该目录叫SYSTEM。 -
进入SYSTEM目录,你应该会看到类似下面这样的文件目录:
$ cd SYSTEM $ dir README README2 config/ config.php docroot/ include/ index.php script/ source/ toolkit/ sqlite/ tmp/ $
为什么要区分 Windows 和 Linux 呢? 这个问题确实让我们没办法回避,事实上这可能也是Solar目前尚不流行的原因,许多人看到这里肯定会问:“ PHP 不是跨平台的么,为何一个PHP框架不是跨平台的呢?”恩,这个问题我现在可以回答你。不错,PHP是跨平台的,但是PHP在两个平台下肯定有不同的实现,而且PHP对于Linux的支持更好。那么Solar也一样,Solar 出生在 Linux 家庭。其实Solar可以直接在win下运行(只要有wamp环境),但是因为 Solar 用到文件系统的 Symlink 特性,所以其实是 Solar 的命令行工具不能很好地在 WIN 下执行。命令行是帮助我们快速开发的得力助手,我们当然不允许它不能使用。
仔细看Solar for Windows的目录结构,你会发现和 Linux 平台下的 Solar 对比,这里多了
README2
文件和toolkit
文件夹。文件README2
是 Roy <http://roygu.com> 用于记录 Solar for Windows 版本日志的。而toolkit
文件夹下是在 WIN 平台的一些工具包,在 WIN 下要想更好的使用 Solar,我认为这些工具包是必要的。 -
Window 版本的主要工作
WIN 下主要的不同也就在
script
目录下,因为我们只需要解决 Solar 命令行问题就行了。这里我要说说我对 Solar 的理解。Paul <http://paul-m-jones.com> 把 Solar 设计得足够好了。整个 Solar 是一个系统,你可以把它理解为操作系统,它由 Solar 内核和辅助工具组成,我们在 Solar 上开发应用就相当于在操作系统上开发软件一样,这个比喻应该好理解而且不过分。一般来说,我们有两种途径访问 Solar:一种是从浏览器访问,这个时候入口文件是/docroot/index.php
或/index.php
;一种是从 CLI(命令行)访问,这个时候入口文件是/script/solar
。这两个文件都通过 Solar 的架构类/source/solar/Solar.php
来使用 Solar 内核。在 Solar 上开发应用是以 vendor 为单位的,你开发的应用的所有代码都是高度集中的,事实上一个 vendor 是一个文件夹。这就是说你在部署代码时,只需要部署 vendor 就行了,非常简单高效。
由于 Solar 使用了文件系统的 Symlink 特性,Windows NT6 之前的系统是不支持 Symlink 特性的,也就是说 WIN 2000, XP, 2003 不支持这种特性。但是市面上 WIN 2000 和 WIN 2003 仍有很大份额,所以不能在这两个服务器版本上部署是不能接受的。但同时为了尽可能小的改变 Solar 的设计哲学,所以只能采用复制的方式来保证
/include
目录的可用性,采用反向同步技术来保证 vendor 的完整性、可移植性。 -
如何开始?
很简单,打开
/script/phpenv.ini
文件,配置 PHP 可执行文件及其配置文件的路径。PHP_EXE="D:\php\php.exe" PHP_INI="D:\php\php.ini"
然后进入 SYSTEM 目录,输入下面这条命令测试你的配置,同时可查看你的 PHP 版本:
D:\xampp\htdocs\solarlatest>script\solar -phpv PHP 5.2.9-2 (cli) (built: Apr 9 2009 08:23:19) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies with Xdebug v2.0.4, Copyright (c) 2002-2008, by Derick Rethans
恭喜,如果出现上面这种情况,说是你已经成功了。接下来初使化 Solar 的运行环境,尽管 WIN NT6 之后的系统支持 Symlink,但 Symlink 是不能移动的,即使创建的时候使用的是相对路径。这就需要我们手工创建了,Paul 在 Solar 1.1.2 版本中提供了
winfix.bat
文件用于解决此问题。不过我有不同的看法,/source/solar/Solar
文件夹是 Solar 的内核,有其特殊性,但我们仍可以把它看作是一个 vendor,是一个系统级的 vendor,所以我们仍想使用link-vendor
命令来为它创建链接,幸运的是,我们已经实现了这个功能。你要做的就是输入下面这条命令:D:\xampp\htdocs\solarlatest>script\solar link-vendor Solar Making links for vendor 'Solar' ... Making link 'include/Solar' ... done. Making link 'include\Test/Solar' ... done. Making link 'include\Mock/Solar' ... done. Making link 'include\Fixture/Solar' ... done. Making link 'include/Solar.php' ... done. Making link 'include\Test/Solar.php' ... done. ... done. Making public symlinks for 'Solar' ... Making public directory docroot/public/Solar/Controller ... done. Making public symlink for Solar_Controller_Bread ... done. Making public symlink for Solar_Controller_Page ... done. Making public directory docroot/public/Solar/View/Helper ... done. Making public symlink for Solar_View_Helper_Pager ... done. ... done. Remember to add 'Solar_App' to the ['Solar_Controller_Front']['classes'] element in your config file so that it finds your apps. Remember to add 'Solar_Model' to the ['Solar_Sql_Model_Catalog']['classes'] elem ent in your config file so that it finds your models.
OK,在 WIN NT6 之后的系统中,接下来的事情就和 Linux 下一模一样了。在 WIN NT6 之前的系统中(也即:WIN XP, 2000, 2003)还有点区别,因为在这种情况下我们是使用复制的方式来模拟实现的,所以在这种系统上我们的工作区域就不再是任意的,我们要细心地在
/include
、/docroot/public
下工作,确保目前的应用是可用的。最后使用sync-vendor命令把所有代码同步到/source
下。# script\solar sync-vendor Solar Sync directories and files ... include/Fixture/Solar -> source/solar/tests/Fixture/Solar done. include/Mock/Solar -> source/solar/tests/Mock/Solar done. include/Test/Solar -> source/solar/tests/Test/Solar done. include/Solar.php -> source/solar/Solar.php done. include/Test/Solar.php -> source/solar/tests/Test/Solar.php done. include/Solar -> source/solar/Solar done. Sync complete. ... done.