1.简介
上一篇介绍了windows 8 下基于XAMPP的Phalcon 4 安装,本篇继续介绍devtools以及创建一个Helloworld的演示。这里,我们可以把Devtools看成是Phalcon专属的composer工具。截止2020.5.25,其v4版本仍然部分存在bug(后续创建controller中会进行演示)。根据海外大神的观点,其可以跳过不用devtools的。不过,方便起见,仍然建议安装。
2.安装Composer
Devtools有几种不同的安装方式,这里借助composer进行。
首先,安装composer
安装完毕后,启动windows命令行,输入composer命令,显示如下,表明安装成功。
3.借助composer安装Devtools
打开windows命令行,输入composer global require phalcon/devtools
,如下:
继续在命令行中输入phalcon, 显示如下,至此,devtools安装完毕
4.创建一个Helloworld
首先,命令行进入xampp\htdocs,输入phalcon create-project store
,这里的store是要建立的project的名称,可以换成你的名称。
打开vscode查看一下store文件夹内容:
浏览器输入localhost/store/,结果如下:
这里也是我认为devtools仍然需要完善的一个bug,其原因在于Phalcon 4把store当成了一个controller,而迄今为止文件夹中还没有创建该controller。所以,会报找不到的错。个人认为这个设计欠妥。不过没关系,让我们把它强行改成helloworld即可。修改public/index.php的代码如下:
<?php
declare(strict_types=1);
use Phalcon\Di\FactoryDefault;
error_reporting(E_ALL);
define('BASE_PATH', dirname(__DIR__));
define('APP_PATH', BASE_PATH . '/app');
try {
/**
* The FactoryDefault Dependency Injector automatically registers
* the services that provide a full stack framework.
*/
$di = new FactoryDefault();
/**
* Read services
*/
include APP_PATH . '/config/services.php';
/**
* Handle routes
*/
include APP_PATH . '/config/router.php';
/**
* Get config service for use in inline setup below
*/
$config = $di->getConfig();
/**
* Include Autoloader
*/
include APP_PATH . '/config/loader.php';
/**
* Handle the request
*/
$application = new \Phalcon\Mvc\Application($di);
//echo $application->handle($_SERVER['REQUEST_URI'])->getContent();
echo 'Hello phalcon world';
} catch (\Exception $e) {
echo $e->getMessage() . '<br>';
echo '<pre>' . $e->getTraceAsString() . '</pre>';
}
再次进入localhost/store即可显示一个Hello phalcon world 的提示。
至此,一个helloworld演示完毕。但是,这里的helloworld的做法并不规范,后续会详细讲解规范的处理方式。
如有错误,欢迎指正。
后记
我又查了phalcon 4 #0 [internal function]: Phalcon\Mvc\Dispatcher->throwDispatchException(’ …’, 2)的报错原因,发现这个在phalcon 4 中很普遍。解决方案在修改方法
修改/public/index.php中的43行:
echo $application->handle($_SERVER['REQUEST_URI'])->getContent();
//修改成
echo $application->handle($_GET['_url'] ?? '/')->getContent();
同时,app/config/config.php中28行改成
'baseUri' => preg_replace('/public([\/\\\\])index.php$/', '', $_SERVER["PHP_SELF"]),
这样就可以了。