小编And*_*708的帖子

Zend Framework notEmpty验证器setRequired

我看了其他问题 /谷歌搜索了这个.我的问题是,当我提交带有notEmpty验证器的空文本框的表单时,它不会触发错误.

首先,我想看看我是否明白之间的差别notEmptysetRequired.据我所知,notEmpty如果提交了一个元素并且值为空,验证器会给出错误.也就是说,如果一个条目不存在于POST数据存在(形式),那么它不如果不是元素产生一个错误需要.喜欢它只在元素设置时运行.除非另有说明,否则该setRequired方法将notEmpty在幕后自动添加验证器.这可确保元素的条目必须存在且不能为空.正确?

现在,我尝试在我添加notEmpty验证器的表单中使用此逻辑,如下所示:

$username = new Zend_Form_Element_Text('txtUsername');
$username->addValidator(new Zend_Validate_NotEmpty(), true);
Run Code Online (Sandbox Code Playgroud)

对于其他文本字段也是如此.如果我在没有输入值的情况下提交表单,我的POST数据如下所示:

(
    [txtUsername] => 
    [txtPassword] => 
    [txtRepeatPassword] => 
)
Run Code Online (Sandbox Code Playgroud)

但是,isValid仍然会计算true并且不会生成错误消息.为什么?notEmpty由于元素在POST数据中有条目,验证器是否应该确定值为空?如果我使用setRequired(true)它,它的工作方式我想要的.我只是想知道,当值为空字符串时,它确定用户名不为空.:-)

提前致谢.

php zend-framework zend-form zend-form-element

4
推荐指数
1
解决办法
3866
查看次数

存储过程与PDO的特定错误代码(在Zend Framework 2中)

我试图在Zend Framework 2中启动并运行存储过程.我试图在存储过程中返回带有out参数的错误代码,但我无法完成这项工作.然后我认为当发生错误时,我可以在PHP中捕获异常.问题是我似乎无法访问特定的错误代码 - 只有一般的错误代码(例如23000 - 完整性约束违规).以下是我想要做的(或类似的)示例:

try {
    $result = $this->dbAdapter->query('CALL sp_register_user(?, ?)', array('username', 'password'));
}

catch (\Exception $e) {
    switch ($e->getCode()) {
        case 1062:
            // Duplicate entry
            break;

        case 1452:
            // Cannot add or update a child row
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

也就是说,我希望能够确切地检查发生了哪个错误.但问题是,抛出的异常的错误代码为23000而不是上述错误代码之一.

在第220行InvalidQueryException抛出一个Zend\Db\Adapter\Driver\Pdo\Statement:

try {
    $this->resource->execute();
} catch (\PDOException $e) {
    throw new Exception\InvalidQueryException('Statement could not be executed', null, $e);
}
Run Code Online (Sandbox Code Playgroud)

PDOException在我的案例中,这里包含错误代码23000.该null参数是错误代码.所以在我的catch块中,我实际上将捕获InvalidQueryException一个错误代码为0,这不是那么有用.此异常确实为我提供了对先前异常(上面的最后一个参数)的访问,这将是PDOException …

php mysql pdo stored-procedures zend-framework2

4
推荐指数
1
解决办法
2310
查看次数

Zend Framework 2段路由所需的段

我正在尝试创建一个路径(或两个),让我使用以下URL格式调用两个不同的操作.

mydomain.com/profile
mydomain.com/profile/1234/something
Run Code Online (Sandbox Code Playgroud)

对于第二种格式,1234应该是必需的整数值,而something应该是可选的字符串.通过使用文字路线,第一种格式很简单.我想我可以为第二种格式添加一个段子路由,但我无法让它工作.我试图省略第一种格式,只用分段路线做第二种格式,但我也没有成功.

这是我尝试过的:

'profile' => array(
    'type' => 'Zend\Mvc\Router\Http\Literal',
    'options' => array(
        'route' => '/profile',
        'defaults' => array(
            'controller' => 'User\Controller\User',
            'action' => 'profile'
        )
    ),
    'child_routes' => array(
        'profile_view' => array(
            'type' => 'Zend\Mvc\Router\Http\Segment',
            'options' => array(
                'route' => '/:code[/:username]',
                'constraints' => array(
                    'code' => '[0-9]*',
                    'username' => '[a-zA-Z0-9_-]*'
                ),
                'defaults' => array(
                    'controller' => 'User\Controller\User',
                    'action' => 'view_profile'
                )
            )
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

因为mydomain.com/profile,我得到以下错误:

Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with …
Run Code Online (Sandbox Code Playgroud)

php routing zend-route zend-framework2 zend-framework-routing

4
推荐指数
1
解决办法
1万
查看次数

ZF2:没有命名空间的自动加载库

以前我只使用与Zend Framework 2一起使用命名空间的第三方库.现在我需要使用不使用命名空间的库,而我似乎无法使其工作.我通过Composer安装它,它安装在vendor目录中.我试图使用它如下:

$obj = new \SEOstats();

结果是致命错误,表明找不到该类.我试图手动配置StandardAutoloader,但到目前为止没有任何运气.我认为通过Composer安装时会自动为我完成自动加载,但我想不是没有命名空间的情况?我没有看到Composer生成的自动加载文件中对库的任何引用.我想我必须手动完成 - 但是如何?

提前致谢.

php autoloader zend-framework2 composer-php

4
推荐指数
1
解决办法
2947
查看次数

在ZF2中将输入过滤器添加到fieldset

我有一个表单Register,它有一个fieldset Profile,而fieldset又有一个fieldset Account.字段集实现InputFilterProviderInterface并因此实现该getInputFilterSpecification方法.这是我添加通用验证器和过滤器的地方,每当使用字段集时都应该使用它们.

现在,在我的注册表单中,我想验证具有给定用户名的帐户是否尚不存在.因此,我需要添加一个验证器来补充在Accountfieldset 上定义的验证器.这是我遇到麻烦的地方.在挖掘了一下之后,我找到了一种向字段集添加输入过滤器的方法.这样,我想,我可以在我的Accountfieldset中添加一个额外的输入过滤器.

class Register extends Zend\InputFilter\InputFilter
{
    public function __construct()
    {
        $this->add(new RegisterProfileFilter(), 'profile');
    }
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我可以在我的Profilefieldset中添加一个输入过滤器,在该输入过滤器中,我可以为我的accountfieldset 做同样的事情.但是,这种方法看起来有两个问题:

  1. 似乎我必须为层次结构中的每个字段集创建一个输入过滤器; 在这种情况下,我必须为Profilefieldset 创建一个输入过滤器,这样我就可以在fieldset中添加一个输入过滤器Account- 即使我不需要在fieldset中添加任何验证器或任何东西Profile.如果我尝试直接将过滤器添加到account字段集,它不起作用
  2. 似乎向字段集添加输入过滤器对象会消除我在fieldset getInputFilterSpecification方法中定义的过滤器,而不是像我想要的那样合并两者

有没有办法合并我的字段集上定义的输入过滤器规范与另一个规范(或Zend\InputFilter\InputFilter我不必将我的字段集规范复制到我的输入过滤器类的实例?这将是重复的代码,不是很可维护或者我错过了导致我走错路的东西?

以下是我的代码,如果它有任何帮助.

// The code has been altered to be more self-explanatory and shorter

class RegisterForm extends \Zend\Form\Form
{
    public function __construct()
    {
        parent::__construct('register'); …
Run Code Online (Sandbox Code Playgroud)

php zend-framework2

4
推荐指数
1
解决办法
4635
查看次数

doctrine2额外的懒惰提取关联

我有一个与Thread实体有OneToMany关联的Message实体.我正在使用DQL查询获取一个线程,我想将其消息量限制为10.因此,我将获取模式设置EXTRA_LAZY为如下所示.

class Thread
{
    // ...

    /**
     * @var ArrayCollection
     * @ORM\OneToMany(targetEntity="Profile\Entity\Message", mappedBy="thread", fetch="EXTRA_LAZY")
     * @ORM\OrderBy({"timeSent" = "ASC"})
     */
    protected $messages;
}
Run Code Online (Sandbox Code Playgroud)

这允许我使用该slice方法向LIMIT数据库发出SQL查询.到目前为止都很好.因为我的消息是加密的,所以在将线程对象处理到控制器(并最终查看)之前,我需要在服务层中对它们进行解密.为实现这一目标,我在服务中执行以下操作:

foreach ($thread->getMessages()->slice(0, 10) as $message) {
    // Decrypt message
}
Run Code Online (Sandbox Code Playgroud)

调用slice触发一个获取10条消息的SQL查询.在我看来,我正在执行以下操作来呈现线程的消息:

$this->partialLoop()->setObjectKey('message');
echo $this->partialLoop('partial/thread/message.phtml', $thread->getMessages());
Run Code Online (Sandbox Code Playgroud)

问题是这会从数据库中获取整个消息集合.如果我slice在我的服务中调用,LIMIT 10则向数据库发出相同的SQL查询,这是不可取的.

如何在我的服务层中处理有限的消息集合而不在我的视图中发出另一个SQL查询?也就是说,要让doctrine创建单个SQL查询,而不是两个.我可以简单地在我的视图中解密我的消息,但在这种情况下,这种方式会破坏服务层的目的.我当然可以"手动"获取消息并将它们添加到线程对象中,但如果我可以通过关联自动完成,那么这将是更受欢迎的.

提前致谢!

php doctrine-orm

4
推荐指数
1
解决办法
3379
查看次数

DynamoDB中的索引通知表

我将实现一个通知系统,我试图找出一种在数据库中存储通知的好方法.我有一个使用PostgreSQL数据库的Web应用程序,但关系数据库似乎不适合这个用例; 我想支持各种类型的通知,每种通知都包含不同的数据,但数据的子集对于所有类型的通知都是通用的.因此,我认为NoSQL数据库可能比尝试规范化关系数据库中的模式更好,因为这将非常棘手.

我的应用程序托管在Amazon Web Services(AWS)中,我一直在寻找DynamoDB来存储通知.这是因为它是受管理的,所以我不必处理它的操作.理想情况下,我想使用MongoDB,但我真的不想自己不必处理数据库的操作.我一直试图想出一种在DynamoDB中做我想做的事情的方法,但我一直在努力,因此我有几个问题.

假设我想为每个通知存储以下数据:

  • 一个ID
  • 通知接收者的用户ID
  • 通知类型
  • 时间戳
  • 是否已被阅读/看到
  • 有关通知/事件的元数据(无需查询)

现在,我希望能够查询给定用户的最新X通知.此外,在另一个查询中,我想获取特定用户的未读通知数.我试图找出一种方法,我可以索引我的表,以便能够有效地做到这一点.

我可以排除简单地使用哈希主键,因为我不会通过简单的哈希键进行查找.我不知道"散列和范围主键"是否会对我有所帮助,因为我不知道将哪个属性作为范围键.我可以将唯一通知ID作为散列键,将用户ID作为范围键吗?这是否允许我仅通过范围键进行查找,即不提供哈希键?那么也许二级索引可以帮助我按时间戳排序,如果这是可能的话.

我还查看了全局二级索引,但问题是查询索引时,DynamoDB只能返回投射到索引中的属性 - 因为我希望返回所有属性,那么我实际上必须复制我的所有数据,看起来都很荒谬.

如何索引我的通知表以支持我的用例?它甚至可能,或者你有任何其他建议吗?

notifications amazon-web-services amazon-dynamodb

4
推荐指数
1
解决办法
771
查看次数

DynamoDB主键和索引表设计

我试图围绕如何在DynamoDB中设计表格.我需要一个Subscription表来存储公司每个订阅的项目.所以我计划了以下属性.

  • SubscriptionID
  • CompanyID
  • 开始日期
  • 结束日期
  • 产品ID

我已经阅读了很多关于索引在DynamoDB中如何在二级索引方面工作的内容,但我真的很难理解这一切.似乎我读的越多,我就越困惑.我理解全局二级索引和本地二级索引的核心概念以及哈希键+范围键.问题是将它们放在一起并设计一个支持我的查询要求的表.

截至目前,我有以下查询要求:

  1. 能够查询给定公司的活动订阅.也就是说,通过查询CompanyID和比较StartDate,并EndDate给定日期
  2. 与上述相同,除了查询给定公司是否具有特定的有效订阅 ProductID

在将来(或现在),我希望能够查询给定的所有活动订阅ProductID.我最初的计划是使用SubscriptionID散列键和CompanyID作为范围键来有效查询给定公司的订阅.但是,我不确定是否可以单独查询范围键?我知道散列键和范围键的组合是唯一的(复合键),但在执行范围键的查找时是否总是需要包含散列键?

我也在考虑制作本地二级索引StartDateEndDate有效地查询给定公司的活动订阅,但我不确定是否应该创建这些全局二级索引,而不是当我想查询所有活动订阅时(对于所有活动订阅)公司)?我的猜测是肯定的,因为我需要查询所有分区,而不仅仅是单个公司的分区.

就像我提到的那样,我对这些概念有了基本的了解,但我的斗争是在查询表/索引以及哪些查询模式时,主键和全局/本地二级索引的每个组合都成为可能/不可能.我发现很难掌握键值存储与二级索引提供的附加功能的组合.如果有人能给我一个如何设计表并解释原因的例子,比如各种选择如何支持我的特定查询要求,我真的很乐意.

我知道很多这些东西都有记录,但我很难在这种情况下使用这些信息.我希望有人能提供帮助.那么:你将如何设计表来支持我列出的查询以及为什么?

database amazon-web-services amazon-dynamodb

4
推荐指数
1
解决办法
580
查看次数

在Elasticsearch查询中包含和排除索引

我有以下Elasticsearch查询。

GET /index1,index2/type1,type2/_search?q=programming
Run Code Online (Sandbox Code Playgroud)

假设我想index2从此搜索查询中排除。该文档指出以下内容

它还支持通配符,例如:test *,以及“添加”(+)和“删除”(-)的功能,例如:+ test *,-test3。

据我了解,我应该能够执行以下操作。

GET /+index1,-index2/type1,type2/_search?q=programming
Run Code Online (Sandbox Code Playgroud)

但是,出现以下错误。

{
  "error": {
    "root_cause": [
      {
        "type": "index_not_found_exception",
        "reason": "no such index",
        "resource.type": "index_or_alias",
        "resource.id": " index1",
        "index": " index1"
      }
    ],
    "type": "index_not_found_exception",
    "reason": "no such index",
    "resource.type": "index_or_alias",
    "resource.id": " index1",
    "index": " index1"
  },
  "status": 404
}
Run Code Online (Sandbox Code Playgroud)

如果删除加号和减号,则查询运行正常。如果添加通配符,它​​似乎可以工作,例如以下查询。

GET /index1,-*index2/type1,type2/_search?q=programming
Run Code Online (Sandbox Code Playgroud)

但是,这并不是我真正想要的。

当我使用加号和减号包括或排除文档说明中的索引时,为什么查询不起作用?我误会了吗?

我正在使用Elasticsearch 2.1。

elasticsearch

4
推荐指数
1
解决办法
1818
查看次数

在 Apache htaccess 中有条件地设置标头

我有一个带有标准.htaccess文件的 PHP Laravel 应用程序,如下所示。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

如果请求的 URL 映射到静态文件,则提供该文件,否则index.php调用。我需要为静态文件添加一组标头,这可能是上述最后两个条件的“其他”。我需要类似下面的伪代码。

if static file
    Header set MyHeaderOne "something"
    Header set MyHeaderTwo "something"
end if
Run Code Online (Sandbox Code Playgroud)

我可以很好地添加标题,但有条件地这样做。我看了一点SetEnvIf,这可能使它成为可能。

那么,我怎样才能为静态文件添加一些标题,即如果请求的文件存在(例如/images/example.jpg)?非常感谢!

apache .htaccess

4
推荐指数
1
解决办法
5994
查看次数