`
xieye
  • 浏览: 830772 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

phalcon 利用注解实现验证

    博客分类:
  • PHP
阅读更多
phalcon 利用注解实现验证

为了精简验证参数的代码,做如下处理。(对Laravel 5 来说,这个功能是现成的,phalcon的话,需手工处理一下)

在注册服务时:

// 验证器事件。$di是FactoryDefault 对象。
$my_eventsManager = new EventsManager();
$my_eventsManager->attach( 'dispatch',new Annotation() );

$di->get("dispatcher")->setEventsManager($my_eventsManager);

主要代码:
<?php

namespace Apps\Validations;

use Apps\Exceptions\InvalidRequestException;
use Phalcon\Events\Event;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Mvc\User\Plugin;

/**
* 利用 注解 实现控制器请求参数验证。
*
*/
class Annotation extends Plugin
{
    /**
     * This event is executed before every route is executed in the dispatcher
     */
    public function beforeExecuteRoute(Event $event, Dispatcher $dispatcher)
    {
        // Parse the annotations in the method currently executed
        $annotations = $this->annotations->getMethod(
            $dispatcher->getControllerClass(),
            $dispatcher->getActiveMethod()
        );

        // Check if the method has an annotation 'Validation'
        if ($annotations->has('Validation')) {
            $annotation = $annotations->get('Validation');
            $class =trim($annotation->getNamedParameter('class'));
            $validation = new $class;
            $messages = $validation->validate($this->request->get());

            if (count($messages)) {
                foreach ($messages as $message) {
                    throw new InvalidRequestException($message);
                }
            }
        }
    }
}

异常代码
<?php

namespace Apps\Exceptions;

use Exception;


class InvalidRequestException extends Exception
{
    public function __construct(string $message = "", int $code = 400)
    {
        parent::__construct($message, $code);
    }
}

修改 public/index.php
try{
    /**
     * 定义项目目录
     */
    define('ROOT_PATH', dirname(__DIR__).'/');
    define('APPS_PATH', ROOT_PATH . 'apps/');

    $di = new \Phalcon\DI\FactoryDefault();
    require CONFIG_PATH . 'services.php';
    $application = new Application();
    $application->setDI($di);
    require CONFIG_PATH . 'modules.php';
    require  CONFIG_PATH . 'router.php';
    echo $application->handle()->getContent();
}catch(\Phalcon\Exception $e){
    echo "phalcon err";
}catch(\Apps\Exceptions\InvalidRequestException $e){
    echo "请求参数错误啦:".$e->getMessage();die;
}catch(PDOException $e){
    echo "err";
}


使用示例,带注解的方法:
<?php

namespace Apps\Api\Controllers;

use Apps\Common\Controllers\ControllerBase;

class TestValidateController extends ControllerBase
{
    /**
     * 这是一个测试用方法
     *
     * @Validation( class = "\Apps\Validations\TestValidation" )
     */
    public function indexAction()
    {
        echo "all ok4";
    }
}

使用示例:控制器验证,验证请求中一定有aa这个参数。
<?php
namespace Apps\Validations;

use Phalcon\Validation;
use Phalcon\Validation\Validator\Email;
use Phalcon\Validation\Validator\PresenceOf;

class TestValidation extends Validation
{
    public function initialize()
    {
         $this->add(
            'aa',
            new PresenceOf(
                [
                    'message' => 'aa必须有。',
                ]
            )
        );

    }
}




0
0
分享到:
评论

相关推荐

    phalcon.dll(windows phalcon插件)

    1. 下载"phalcon.dll":这个文件在压缩包里名为"php_phalcon.dll",它是Phalcon的Windows二进制实现。你需要找到对应你PHP版本的正确dll文件。由于描述中提到的是Phalcon 3.4.1,因此下载的dll应与此版本匹配。 2. ...

    phalcon 中文文档 全中文手册

    这部分将讲解如何扩展Phalcon并实现自定义功能。 总之,“phalcon 中文文档 全中文手册”是学习和掌握Phalcon框架的重要资料,它涵盖了从基础到高级的所有关键知识点,对于想要提升PHP开发效率的开发者来说,是一份...

    phalcon英文文档中文注释版

    此为Phalcon1.3.0的官方文档的中文注释版本 对其中非常多的关键点进行了中文注释以使开发者更容易的学习Phalcon框架 本书的中文翻译可能见我的博客在陆续的更新中http://blog.csdn.net/qzfzz 此文件若侵犯了您的版权...

    phalcon 中文chm文档

    文档中讲解了如何定义数据模型,使用查询构造器执行SQL语句,以及利用Phalcon的事务处理功能。 4. **路由(Routing)**:Phalcon的路由系统允许开发者定义URL模式和处理这些URL的控制器动作,文档中详细介绍了如何...

    php phalcon项目实战

    学习这个部分,开发者可以了解如何利用Phalcon的强大功能实现安全、高效的后台管理接口。 在这个项目实战中,你将学习到以下关键知识点: 1. Phalcon框架安装与配置:包括如何安装PHP扩展,设置项目环境,以及配置...

    phalcon框架的demo

    Invo的实现方式可以让我们学习到如何利用Phalcon的特性来优化Web应用性能,如预编译视图、减少内存占用等。 9. **国际化与本地化**:Invo可能包含了多语言支持,Phalcon提供了i18n(Internationalization)接口,...

    phalcon 中文参考文档

    10. **安全(Security)**:Phalcon关注应用的安全性,提供了防止SQL注入、XSS攻击、CSRF保护等功能,同时还有输入验证和输出过滤工具。 11. **服务容器(Service Container)**:Phalcon的服务容器允许开发者管理...

    phalcon IDE代码提示库

    在本文中,我们将深入探讨如何利用"phalcon IDE代码提示库"来优化你的开发体验,特别是针对PHPStorm和NetBeans等流行的集成开发环境(IDE)。 **Phalcon DevTools** "phalcon-devtools-master"这个压缩包文件很...

    phalcon开发工具 phalcon-tools

    phalcon开发工具 phalcon-tools

    swoole-phalcon

    本文将深入探讨这两个技术的结合——"swoole-phalcon",以及如何利用它们高效地实现高性能的Web应用。 Swoole是一个为PHP设计的高性能、异步、并行的网络通信引擎。它提供了TCP、UDP、HTTP、WebSocket等多种协议的...

    Phalcon 3.0.0 中文文档

    3. 自定义中间件:通过中间件实现过滤、验证和额外的功能,增加应用的灵活性。 4. 使用依赖注入:通过依赖注入容器管理服务,减少耦合,提高代码质量。 总结,Phalcon 3.0.0 是一个高效且全面的PHP框架,它的设计...

    phalcon2中文手册+教程+DEMO

    1tutorial-invo可能是一个基于Phalcon构建的发票管理系统,它展示了如何使用Phalcon的Model来处理数据库交互,如何通过Controller处理业务逻辑,以及如何利用View展示数据。而1tutorial-master可能是一个更全面的...

    phalcon chm文档-可用

    7. 安全性:Phalcon提供了防止XSS、CSRF等常见攻击的安全工具,如输入验证、输出过滤和安全的会话管理。 8. 部署友好:由于其C扩展的性质,Phalcon无需额外的运行环境,只需安装扩展即可在大多数PHP环境中使用。 9...

    phalcon 2.0.6

    开发者可以利用Phalcon快速创建RESTful API、构建内容管理系统(CMS)、电子商务平台等。使用Phalcon,开发者可以享受到其高效的性能和简洁的API,同时减少重复代码的编写。 6. **社区与文档**: Phalcon拥有活跃...

    Phalcon 2.0.10 文档 html中文版

    1. MVC架构:Phalcon提供了完整的MVC实现,使得开发者可以按照标准的分层模式组织代码,提高代码的可读性和可维护性。Model负责数据处理,View用于呈现用户界面,Controller作为业务逻辑的中心。 2. 依赖注入容器:...

    Phalcon1.3中文手册,纯手工翻译

    Phalcon是一款高效的、用C语言编写的PHP框架,它的出现为PHP开发者提供了更快...通过深入阅读并实践手册中的内容,开发者可以快速提升在Phalcon框架下的开发能力,更好地利用这一强大的工具来构建高效、稳定的PHP应用。

    phalcon文档附中文笔记

    在实际项目中,你还可以利用Phalcon的微框架特性构建轻量级的应用,或者利用它的事件系统来实现插件化开发。此外,Phalcon支持RESTful API的构建,对于开发前后端分离的应用非常有用。 总的来说,这份“Phalcon文档...

    PHP7框架Phalcon7 v1.2.3

    Phalcon 也是松耦合的,可以根据项目的需要任意使用其他对象。Phalcon 不只是为了卓越的性能, 我们的目标是让它更加健壮,拥有更加丰富的功能以及更加简单易于使用!基于Phalcon框架1.3版本开发,继承优化了DI(多...

Global site tag (gtag.js) - Google Analytics