🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 教程:Vökuró Vökuró是另一个示例应用程序,您可以使用它来了解有关Phalcon的更多信息。Vökuró是一个小型网站,展示了如何实现安全功能以及用户和权限管理。您可以从[Github](https://github.com/phalcon/vokuro)克隆其代码。 ## 项目结构 在文档根目录中克隆项目后,您将看到以下结构: ```bash vokur app/ config/ controllers/ forms/ library/ models/ views/ cache/ public/ css/ img/ schemas/ ``` 该项目遵循与INVO非常相似的结构。在浏览器`http://localhost/vokuro`中打开应用程序后,您将看到如下内容: ![](https://docs.phalconphp.com/images/content/tutorial-vokuro-1.png) 该应用程序分为两个部分,一个是前端,访问者可以在其中注册服务,另一个是管理用户可以管理注册用户的后端。前端和后端都组合在一个模块中。 ## 加载类和依赖 该项目使用`Phalcon\Loader`在项目和作曲家中加载控制器,模型,表单等,以加载项目的依赖。因此,在执行Vökuró之前,您必须做的第一件事是通过[composer](https://getcomposer.org/)安装其依赖。假设您已正确安装,请在控制台中键入以下命令: ```bash cd vokuro composer install ``` Vökuró使用Swift发送电子邮件以确认注册用户的注册,`composer.json`看起来像: ```json { "require" : { "php": ">=5.5.0", "ext-phalcon": ">=3.0.0", "swiftmailer/swiftmailer": "^5.4", "amazonwebservices/aws-sdk-for-php": "~1.0" } } ``` 现在,有一个名为`app/config/loader.php`的文件,其中设置了所有自动加载的东西。在此文件的末尾,您可以看到包含composer自动加载器,使应用程序能够自动加载下载的依赖项中的任何类: ```php <?php // ... // Use composer autoloader to load vendor classes require_once BASE_PATH . '/vendor/autoload.php'; ``` 此外,与INVO不同,Vökuró利用控制器和模型的命名空间,这是构建项目的推荐做法。这样自动加载器看起来与我们之前看到的略有不同(`app/config/loader.php`): ```php <?php use Phalcon\Loader; $loader = new Loader(); $loader->registerNamespaces( [ 'Vokuro\Models' => $config->application->modelsDir, 'Vokuro\Controllers' => $config->application->controllersDir, 'Vokuro\Forms' => $config->application->formsDir, 'Vokuro' => $config->application->libraryDir, ] ); $loader->register(); // ... ``` 我们使用`registerDirectories()`而不是使用`registerNamespaces()`。每个命名空间都指向配置文件(`app/config/config.php`)中定义的目录。例如,命名空间`Vokuro\Controllers`指向`app/controllers`,因此该命名空间中的应用程序所需的所有类都需要它的定义: ```php <?php namespace Vokuro\Controllers; class AboutController extends ControllerBase { // ... } ``` ## 注册 首先,让我们来看看用户在Vökuró的注册方式。当用户单击`Create an Account`按钮时,将调用控制器SessionController并执行操作`signup` : ```php <?php namespace Vokuro\Controllers; use Vokuro\Forms\SignUpForm; class SessionController extends ControllerBase { public function signupAction() { $form = new SignUpForm(); // ... $this->view->form = $form; } } ``` 此操作只是将`SignUpForm`的表单实例传递给视图,该视图本身被呈现以允许用户输入登录详细信息: ```twig {{ form('class': 'form-search') }} <h2> Sign Up </h2> <p>{{ form.label('name') }}</p> <p> {{ form.render('name') }} {{ form.messages('name') }} </p> <p>{{ form.label('email') }}</p> <p> {{ form.render('email') }} {{ form.messages('email') }} </p> <p>{{ form.label('password') }}</p> <p> {{ form.render('password') }} {{ form.messages('password') }} </p> <p>{{ form.label('confirmPassword') }}</p> <p> {{ form.render('confirmPassword') }} {{ form.messages('confirmPassword') }} </p> <p> {{ form.render('terms') }} {{ form.label('terms') }} {{ form.messages('terms') }} </p> <p>{{ form.render('Sign Up') }}</p> {{ form.render('csrf', ['value': security.getToken()]) }} {{ form.messages('csrf') }} <hr> {{ endForm() }} ```