`
xieye
  • 浏览: 807049 次
  • 性别: 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英文文档中文注释版

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

    phalcon开发工具 phalcon-tools

    phalcon开发工具 phalcon-tools

    PHP7框架Phalcon7 v1.2.3

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

    swoole-phalcon

    swoole-phalcon 代码分享 swooler + phalcon 高效实现

    PhalconPHP 3.4.0.zip

    添加Phalcon\Crypt::useSigning来设置是否必须使用计算消息摘要(注意:此功能将在Phalcon4.0.0中默认启用)#13379;添加了Phalcon\Crypt::getAvailableHashAlgos以获得适用于计算消息摘要的注册散列算法列表#13379;...

    Phalcon 3.0.0 中文文档

    Phalcon 3.0.0 中文文档 Phalcon 3.0.0 中文文档 Phalcon 3.0.0 中文文档

    phalcon 中文文档 全中文手册

    phalcon 中文文档 全中文手册 网页格式 放在环境中 或直接打开查看

    PHP扩展Phalcon源码

    Phalcon is optimized for high performance. Its unique architecture allows the framework to always be memory resident, offering its functionality whenever its needed, without expensive file stats and ...

    Phalcon php框架 v2.0.2.zip

    PhalconPHP 是一个使用 C 扩展开发的 PHP Web 框架,提供高性能和低资源占用。   Phalcon 是一个开源的、全堆栈的 PHP 5 框架,使用 C 扩展...Phalcon 1.x还没完全迁移到Phalcon 2.0,比如目前数据库只支持MySQL。

    Phalcon的PhpStorm代码提示说明

    Phalcon的PhpStorm代码提示说明 Phalcon的PhpStorm代码提示说明

    Phalcon 3.1.1 中文文档 chm

    网站上取下来,转换成chm,3.1.1文档版本,... Phalcon 也是松耦合的,可以根据项目的需要任意使用其他对象。 Phalcon 不只是为了卓越的性能, 我们的目标是让它更加健壮,拥有更加丰富的功能以及更加简单易于使用!

    phalcon_2.0_x64

    phalcon 2.0.0版本64位 包含PHP5.3、PHP5.4、PHP5.5、PHP5.6 本资料共包含以下附件: phalcon_x64_VC9_php5.3.9_2.0.0.zip phalcon_x64_VC9_php5.3.9_2.0.0_nts.zip phalcon_x64_VC9_php5.4.0_2.0.0.zip phalcon...

    Phalcon Docs Mobi 格式文档

    Phalcon 官方最新版 v3.3 的mobi格式的文档: Phalcon is an open source full stack framework for PHP, written as a C-extension. Phalcon is optimized for high performance. Its unique architecture allows ...

    phalcon框架的demo

    phalcon框架的demo

    phalcon中文开发文档

    Phalcon 是什么?¶ Phalcon 是开源、全功能栈、使用 C 扩展编写、针对高性能优化的 PHP 5 框架。 开发者不需要学习和使用 C 语言的功能, 因为所有的功能都以 PHP 类的方式暴露出来,可以直接使用。 Phalcon 也是...

    phalcon-jwt-auth:Phalcon框架的基本jwt身份验证类

    一个简单的JWT中间件,用于Phalcon Micro处理无状态身份验证。 安装 $ composer require dmkit/phalcon-jwt-auth 或在您的composer.json中 { " require " : { " dmkit/phalcon-jwt-auth " : " dev-master " } ...

    phalcon手册

    phalcon手册Welcome to Phalcon framework. Our mission is to give you an advanced tool for developing the faster web sites and applications with PHP.

    phalcon 中文参考文档

    PHP 高效框架 phalcon框架 中文参考文档

    phalcon-v2.0.10 chm中文手册

    phalcon-v2.0.10 文档,大部分已翻译为中文

    phalcon IDE代码提示库

    phalcon 框架 IDE代码提示 phpstrom NetBeans 等IDE 使用的代码提示

Global site tag (gtag.js) - Google Analytics