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必须有。',
]
)
);
}
}
分享到:
相关推荐
1. 下载"phalcon.dll":这个文件在压缩包里名为"php_phalcon.dll",它是Phalcon的Windows二进制实现。你需要找到对应你PHP版本的正确dll文件。由于描述中提到的是Phalcon 3.4.1,因此下载的dll应与此版本匹配。 2. ...
这部分将讲解如何扩展Phalcon并实现自定义功能。 总之,“phalcon 中文文档 全中文手册”是学习和掌握Phalcon框架的重要资料,它涵盖了从基础到高级的所有关键知识点,对于想要提升PHP开发效率的开发者来说,是一份...
此为Phalcon1.3.0的官方文档的中文注释版本 对其中非常多的关键点进行了中文注释以使开发者更容易的学习Phalcon框架 本书的中文翻译可能见我的博客在陆续的更新中http://blog.csdn.net/qzfzz 此文件若侵犯了您的版权...
文档中讲解了如何定义数据模型,使用查询构造器执行SQL语句,以及利用Phalcon的事务处理功能。 4. **路由(Routing)**:Phalcon的路由系统允许开发者定义URL模式和处理这些URL的控制器动作,文档中详细介绍了如何...
学习这个部分,开发者可以了解如何利用Phalcon的强大功能实现安全、高效的后台管理接口。 在这个项目实战中,你将学习到以下关键知识点: 1. Phalcon框架安装与配置:包括如何安装PHP扩展,设置项目环境,以及配置...
Invo的实现方式可以让我们学习到如何利用Phalcon的特性来优化Web应用性能,如预编译视图、减少内存占用等。 9. **国际化与本地化**:Invo可能包含了多语言支持,Phalcon提供了i18n(Internationalization)接口,...
10. **安全(Security)**:Phalcon关注应用的安全性,提供了防止SQL注入、XSS攻击、CSRF保护等功能,同时还有输入验证和输出过滤工具。 11. **服务容器(Service Container)**:Phalcon的服务容器允许开发者管理...
在本文中,我们将深入探讨如何利用"phalcon IDE代码提示库"来优化你的开发体验,特别是针对PHPStorm和NetBeans等流行的集成开发环境(IDE)。 **Phalcon DevTools** "phalcon-devtools-master"这个压缩包文件很...
phalcon开发工具 phalcon-tools
本文将深入探讨这两个技术的结合——"swoole-phalcon",以及如何利用它们高效地实现高性能的Web应用。 Swoole是一个为PHP设计的高性能、异步、并行的网络通信引擎。它提供了TCP、UDP、HTTP、WebSocket等多种协议的...
3. 自定义中间件:通过中间件实现过滤、验证和额外的功能,增加应用的灵活性。 4. 使用依赖注入:通过依赖注入容器管理服务,减少耦合,提高代码质量。 总结,Phalcon 3.0.0 是一个高效且全面的PHP框架,它的设计...
1tutorial-invo可能是一个基于Phalcon构建的发票管理系统,它展示了如何使用Phalcon的Model来处理数据库交互,如何通过Controller处理业务逻辑,以及如何利用View展示数据。而1tutorial-master可能是一个更全面的...
7. 安全性:Phalcon提供了防止XSS、CSRF等常见攻击的安全工具,如输入验证、输出过滤和安全的会话管理。 8. 部署友好:由于其C扩展的性质,Phalcon无需额外的运行环境,只需安装扩展即可在大多数PHP环境中使用。 9...
开发者可以利用Phalcon快速创建RESTful API、构建内容管理系统(CMS)、电子商务平台等。使用Phalcon,开发者可以享受到其高效的性能和简洁的API,同时减少重复代码的编写。 6. **社区与文档**: Phalcon拥有活跃...
1. MVC架构:Phalcon提供了完整的MVC实现,使得开发者可以按照标准的分层模式组织代码,提高代码的可读性和可维护性。Model负责数据处理,View用于呈现用户界面,Controller作为业务逻辑的中心。 2. 依赖注入容器:...
Phalcon是一款高效的、用C语言编写的PHP框架,它的出现为PHP开发者提供了更快...通过深入阅读并实践手册中的内容,开发者可以快速提升在Phalcon框架下的开发能力,更好地利用这一强大的工具来构建高效、稳定的PHP应用。
在实际项目中,你还可以利用Phalcon的微框架特性构建轻量级的应用,或者利用它的事件系统来实现插件化开发。此外,Phalcon支持RESTful API的构建,对于开发前后端分离的应用非常有用。 总的来说,这份“Phalcon文档...
Phalcon 也是松耦合的,可以根据项目的需要任意使用其他对象。Phalcon 不只是为了卓越的性能, 我们的目标是让它更加健壮,拥有更加丰富的功能以及更加简单易于使用!基于Phalcon框架1.3版本开发,继承优化了DI(多...