如果你刷新页面,你将发现另一个报错:Phalcon\Di\Exception: Service ‘view’ wasn’t found in the dependency injection container。之所以有这样的报错是因为每个模块都有自己的配置目录,我们需要创建对应的文件。进入modules/Frontend/目录,新建一个目录名为Config。

之所以使用首字母大写,因为它更容易在命名空间中读取和加载。

现在,在modules/Frontend/Config/目录创建包含如下代码,名为config.php的文件:

<?php
$config = require __DIR__.'/../../../config/config.php';
$module_config = array(
'application' => array(
'controllersDir' => __DIR__ . '/../Controllers/',
'modelsDir' => __DIR__ . '/../Models/',
'viewsDir' => __DIR__ . '/../Views/',
'baseUri' => '/',
'cryptSalt' => [email protected]',
'publicUrl' => 'http://www.learning-phalcon.localhost'
));
$config->merge($module_config);
return $config;

在第一行中,我们将全局配置文件的内容分配给$config变量。然后,我们设置模块配置,并将这些信息合并到我们的全局$config变量中。 接下来,让我们在同一个文件夹(modules/Frontend/Config/)中创建路由和服务文件:
services.php:

<?php
$di['dispatcher'] = function () use ($di) {
$eventsManager = $di->getShared('eventsManager');
$dispatcher = new \Phalcon\Mvc\Dispatcher();
$dispatcher->setEventsManager($eventsManager);
$dispatcher->setDefaultNamespace('App\Frontend\Controllers');
return $dispatcher;
};
$di['url']->setBaseUri(''.$config->application->baseUri.'');
$di['view'] = function () {
$view = new \Phalcon\Mvc\View();
$view->setViewsDir(__DIR__ . '/../Views/Default/');
$view->registerEngines(array(
".volt" => 'voltService'
));
return $view;
};

在services.php文件中,我们重写了DI的URL和dispatcher组件,我们创建了一个使用全局服务文件(config/services.php)中声明的voltService作为自定义视图的服务。
routing.php:

<?php
$router = new \Phalcon\Mvc\Router(false);
$router->clear();
$router->add('/', array(
'module' => 'frontend',
'controller' => 'index',
'action' => 'index'
));
return $router;

我们需要在这里有一个routing.php文件,因为我们将为前端模块创建自定义路由。 接下来我们需要的是一个控制器。 一般来说,创建基本文件和所有其他文件以扩展基础是一个很好的做法。 这样,您将避免代码重复。 当然,你可以使用其他方法特性,但对于这个项目,我们将在大部分情况下使用一个基本文件。

因此,让我们在modules/Frontend/中创建Controllers目录,并在modules/Frontend/Controllers/目录中创建一个空白的基本控制器:

cd modules/Frontend/
mkdir Controllers
touch Controllers/BaseController.php

现在,将如下代码写到BaseController.php文件中:
然后,以下面的代码创建另一个名为IndexController.php的文件:

<?php
namespace App\Frontend\Controllers;
class IndexController extends BaseController
{
public function indexAction()
{
}
}

Related Posts: 零基础学Phalcon 23 在模块中使用路由组件 二 :