我正在写一个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在接口声明中记录?它应该记录在案吗?
我正在一个类似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实现这一目标?如果没有,是否可以将SQL或其他工具与Algolia结合使用以达到预期效果?当然,我可以用Elasticsearch完成所有这些工作,但是Algolia如此快速和简单,我不愿意因为这些问题而离开它.
我在Aptana遇到了一个小问题.每当我尝试编辑特定编辑器的设置时,单击"应用",然后单击"确定",但我的首选项不会保存,如果我再次打开设置,则会显示默认设置.可能导致问题的原因是什么?
我正在使用Ubuntu 11.04和Aptana build 3.0.4.201108101506.
我期待着阅读你的建议.
亚历山德罗·德桑蒂斯
编辑:版本3.0.5的情况发生了变化.现在,YAML编辑器的首选项在关闭设置窗口时会被删除,而其他编辑器的首选项在关闭IDE时会被默认值覆盖......这很奇怪.
我正在编写一个可配置的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(适用于常规控制器),但这也不起作用(控制器找不到帮助器).
有任何想法吗?
我有一个小的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框架的世界相当新,所以请原谅我可能遗漏的任何明显的东西.我在网上做了一些研究,但找不到解释.我只是想确保我以正确的方式做事,而不仅仅是在这里解决这个问题.
我刚注意到一些奇怪的事情 我认为,正如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. …