小编Ale*_*tis的帖子

如何在界面文档中记录@throws

我正在写一个PHP库,我有一个问题.我的界面中有类似的内容:

<?php
/**
 * My interface
 *
 * ...
 */
interface MyInterface
{
    /**
     * This method does foo.
     *
     * @throws \RuntimeException If foo can't be done.
     */
    public function fooAndBar();
}
?>
Run Code Online (Sandbox Code Playgroud)

现在,该@throws条目并不完全正确,因为接口实际上没有做任何事情,并且纯粹用于抽象实现细节.但是,我总是使用它,因为当出现问题时,我所有的接口实现都会抛出异常.

但是另一个开发人员可能会编写一个不会失败的实现(因此它不能抛出异常),或者他/她可能想要使用另一个异常类.

在这种情况下,我应该如何@throws在接口声明中记录?它应该记录在案吗?

php oop documentation interface exception

14
推荐指数
2
解决办法
3950
查看次数

与Algolia的可用性跟踪

我正在一个类似Airbnb的网站上工作,我正在用Algolia重写我们内部的基于SQL的搜索系统.到目前为止,这是一段非常愉快的旅程,因为我已经设法删除了大量遗留代码并将其外包,结果非常棒.但是,我们的搜索系统中有一个关键部分我不确定可以用Algolia实现.

在内部,我们将每个资产的每个日期的可用性/不可用性(和价格)存储为数据库中的单个行.这意味着我们的availabilities表看起来像这样:

asset_id | date       | status      | price_cents
-------- | ---------- | ----------- | -----------
1        | 2017-02-09 | available   | 15000
1        | 2017-02-10 | available   | 15000
1        | 2017-02-11 | unavailable | NULL
1        | 2017-02-12 | available   | 20000
Run Code Online (Sandbox Code Playgroud)

当用户搜索可用属性时,他们会输入日期范围和(可选)价格范围.

我们现在正在做的只是查询availabilities表并确保日期范围内的所有日期都可用于该资产(即可用日期的计数等于该范围内的天数).如果用户输入价格范围,我们还会确保这些日期的平均价格在要求的范围内.SQL查询相当复杂,但这是它在一天结束时所做的事情.

我一直试图用Algolia复制这个,但找不到任何关于类似功能的文档.事实上,我现在面临两个不同的问题:

  • 我无法确保所提供的日期范围内的所有日期都可用,因为Algolia几乎没有关于协会的知识,并且
  • 我无法计算(和查询)所提供日期范围的平均价格,因为它取决于用户输入(即日期范围).

有没有办法与Algolia实现这一目标?如果没有,是否可以将SQL或其他工具与Algolia结合使用以达到预期效果?当然,我可以用Elasticsearch完成所有这些工作,但是Algolia如此快速和简单,我不愿意因为这些问题而离开它.

search algolia

12
推荐指数
1
解决办法
308
查看次数

Aptana不会保存编辑器首选项

我在Aptana遇到了一个小问题.每当我尝试编辑特定编辑器的设置时,单击"应用",然后单击"确定",但我的首选项不会保存,如果我再次打开设置,则会显示默认设置.可能导致问题的原因是什么?

我正在使用Ubuntu 11.04和Aptana build 3.0.4.201108101506.

我期待着阅读你的建议.

亚历山德罗·德桑蒂斯

编辑:版本3.0.5的情况发生了变化.现在,YAML编辑器的首选项在关闭设置窗口时会被删除,而其他编辑器的首选项在关闭IDE时会被默认值覆盖......这很奇怪.

aptana ide

10
推荐指数
1
解决办法
638
查看次数

在隔离的Rails引擎中从父应用程序访问帮助程序

我正在编写一个可配置的Rails引擎.我有一个authentication_helper配置选项来定义应该before_action在需要身份验证的所有控制器中调用哪个帮助程序.

问题是我无法从引擎的控制器访问父应用程序的帮助程序.我的理解是,这是因为发动机是孤立的.

我考虑使用块而不是方法名称,但我不确定这是否可行,或者我是否能够从控制器外部干净地访问授权逻辑.

我过去使用过的Active Admin有一个类似的配置选项.我注意到他们的发动机没有隔离,所以也许我高估了发动机隔离的重要性?

是否有一种优雅的方式来获得引擎隔离的好处,同时还允许这种定制?或者我应该完全放弃隔离?

编辑#1

Brad Werth指出了我正确的方向,因为这适用于继承自ApplicationController::Base以下的常规控制器:

module MyBigFancyEngine
  class Engine < Rails::Engine

    isolate_namespace MyBigFancyEngine  

    config.to_prepare do
      # Make the implementing application's helpers available to the engine.
      # This is required for the overriding of engine views and helpers to work correctly.
      MyBigFancyEngine::ApplicationController.helper Rails.application.helpers
    end

  end
end
Run Code Online (Sandbox Code Playgroud)

但是,我的引擎ApplicationController继承自RocketPant::Base,但没有提供helper方法.我试图使用一个简单的include(适用于常规控制器),但这也不起作用(控制器找不到帮助器).

有任何想法吗?

ruby ruby-on-rails rails-engines

6
推荐指数
2
解决办法
1718
查看次数

为什么我的Vue组件需要:key?

我有一个小的Vue.js组件,它显示了一个喜欢的星形图标.点击图标收藏夹/不喜欢该元素.到目前为止,我只实现了UI部分,如下所示:

<template>
  <div :key="favorite">
    <a v-on:click="toggleFavorite" style="cursor: pointer">
      <i v-show="favorite" class="text-warning fas fa-star"></i>
      <i v-show="!favorite" class="text-warning far fa-star"></i>
    </a>
  </div>
</template>

<script>
export default {
  data() {
    return {
      favorite: true,
    }
  },
  mounted() {
  },
  methods: {
    toggleFavorite() {
      this.favorite = !this.favorite
    }
  },
  props: ['team-id'],
}
</script>

<style scoped>
</style>
Run Code Online (Sandbox Code Playgroud)

如您所见,逻辑非常简单.

这种运作良好,但有一件事困扰我的是,如果我删除了:key从我的模板特性,图标是不是当我点击它更新(即使我已经检查了相关物业确实正确更新).添加:key使它工作,我想是因为它强制Vue.js在favorite更新时完全重新渲染组件.

为什么会这样?我对JS框架的世界相当新,所以请原谅我可能遗漏的任何明显的东西.我在网上做了一些研究,但找不到解释.我只是想确保我以正确的方式做事,而不仅仅是在这里解决这个问题.

vue.js vuejs2

6
推荐指数
1
解决办法
520
查看次数

session_start()在输出发送后有效

我刚注意到一些奇怪的事情 我认为,正如PHP的手册所说,session_start()必须在将任何输出发送到浏览器之前调用它:

要使用基于cookie的会话,必须在向浏览器输出任何内容之前调用session_start().

所以,出于好奇,我创建了两个脚本.一个是write.php:

<?php
echo 'foo';

session_start();
$_SESSION['bar'] = 'baz';
?>
Run Code Online (Sandbox Code Playgroud)

另一个是read.php:

<?php
echo 'foo';

session_start();
var_dump($_SESSION['bar']);
?>
Run Code Online (Sandbox Code Playgroud)

令人奇怪的是,该会议被写,甚至后读取echo荷兰国际集团FOO.

但是,如果我flush()echos 之后添加一个调用,Apache的错误日志会报告:

[Tue Jan 03 11:57:21 2012] [错误] [client 127.0.0.1] PHP警告:session_start():无法发送会话缓存限制器 - 已在第5行/var/www/sessions/write.php中发送的标头[Tue Jan 03 11:57:21 2012] [错误] [client 127.0.0.1] PHP Stack trace:[Tue Jan 03 11:57:21 2012] [error] [client 127.0.0.1] PHP 1. {main} ()/var/www/sessions/write.php:0 [Tue Jan 03 11:57:21 2012] [error] [client 127.0.0.1] PHP 2. …

php session

3
推荐指数
1
解决办法
2222
查看次数