我正在研究使用html5数据属性将验证规则传递给jquery.validate作为停止间隙,直到插件更新为HTML5支持.我正在使用jquery 1.4.2,jquery.validate 1.7和jquery.validate 2.1.在我的HTML中,我使用的代码如下:
<input name="foo" type="text" data-validate="{required:true,digits:true}" />
Run Code Online (Sandbox Code Playgroud)
在我的jQuery中,我正在做以下事情:
<script type="text/javascript">
$.metadata.setType ("html5");
$(function ()
{
$('#myForm').validate ({debug:true});
});
</script>
Run Code Online (Sandbox Code Playgroud)
这只会导致错误消息,validator.methods [method]未定义
我确实在元素上使用了data-validate属性做了一个元数据(),我得到了一个名为validate的对象,其中设置了我的属性,所以我知道元数据是找到属性并从中加载,但是validate插件可以似乎处理它.如果我回到class ="{validate:{...}}"并注释掉配置元数据以使用HTML 5的行,那么它都可以正常工作.
我做错了什么,或者验证和/或元数据插件是否存在问题?
我正在思考在PHP中实现工厂模式的两种不同方法之一.我不知道这些变种是否有正确的名称,所以现在我打算称它们为内部工厂和外部工厂.
内部工厂:工厂方法在类本身中实现为静态公共方法
<?php
class Foo
{
protected
$loadedProps = false;
public static factory ($id)
{
$class = get_called_class ();
$item = new $class ($id);
if ($item -> loadedProps ())
{
return ($item);
}
}
public function loadedProps ()
{
return ($this -> loadedProps);
}
protected function loadPropsFromDB ($id)
{
// Some SQL logic goes here
}
protected function __construct ($id)
{
$this -> loadedProps = $this -> loadPropsFromDB ($id);
}
}
?>
Run Code Online (Sandbox Code Playgroud)
外部工厂:工厂及其初始化的项目作为单独的实体实施
<?php
class Foo
{
protected
$loadedProps = …Run Code Online (Sandbox Code Playgroud) base_convert()函数似乎没有保留符号。
例如:
var_dump (base_convert ('-100', 10, 10));
Run Code Online (Sandbox Code Playgroud)
此输出为100
有没有一种转换基数而不丢失符号的方法?
我正在开始编写一个PHP脚本,该脚本将作为cron作业运行,并通过Google Shopping API定期更新产品列表.
我下载了PHP的GSC客户端库,我正在尝试使用Google Shopping API文档来获取令牌.然而,感觉就像在文档中某处有关于如何在生成URL后实际请求令牌的步骤.
到目前为止,这是我的代码:
require ("./lib/shoppingclient/GShoppingContent.php");
const G_MERCHANT_ID = '**********';
const G_CLIENT_ID = '**********';
const G_CLIENT_SECRET = '**********';
$obj_client = new GSC_Client (G_MERCHANT_ID);
// Obtain an OAuth2 token to access the API with
$obj_token = new GSC_OAuth2Token (G_CLIENT_ID, G_CLIENT_SECRET, USER_AGENT);
$str_url = $obj_token -> generateAuthorizeUrl ('urn:ietf:wg:oauth:2.0:oob');
echo ($str_url . PHP_EOL);
/* @var $obj_response _GSC_Response */
$obj_response = $obj_token -> makeAuthenticatedRequest (curl_init ($str_url));
echo ($obj_response);
Run Code Online (Sandbox Code Playgroud)
当我从命令行运行上面的命令时,我得到:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=blah-blah-blah-etc-etc-etc ...
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD> …Run Code Online (Sandbox Code Playgroud) 我遇到了一个多线程服务器的问题,我正在构建一个学术练习,更具体地说是获得一个优雅地关闭的连接.
每个连接都由Session类管理.此类维护2个连接线程,一个DownstreamThread和一个UpstreamThread.
UpstreamThread在客户端套接字上阻塞,并将所有传入的字符串编码为消息,以传递到另一层进行处理.DownstreamThread阻塞BlockingQueue,其中插入了客户端的消息.当队列中有消息时,下游线程将消息从队列中取出,将其转换为字符串并将其发送到客户端.在最终系统中,应用程序层将对传入的消息进行操作,并将传出的消息推送到服务器以发送到适当的客户端,但是现在我只有一个简单的应用程序,在传回消息之前会休息一秒钟作为附加时间戳的传出消息.
我遇到的问题是当客户端断开连接时,整个事情都会正常关闭.我正在争论的第一个问题是正常的断开连接,客户端让服务器知道它正在结束与QUIT命令的连接.基本的伪代码是:
while (!quitting) {
inputString = socket.readLine () // blocks
if (inputString != "QUIT") {
// forward the message upstream
server.acceptMessage (inputString);
} else {
// Do cleanup
quitting = true;
socket.close ();
}
}
Run Code Online (Sandbox Code Playgroud)
上游线程的主循环查看输入字符串.如果是QUIT,则线程设置一个标志,表示客户端已结束通信并退出循环.这导致上游线程很好地关闭.
只要未设置连接关闭标志,下游线程的主循环就会等待BlockingQueue中的消息.如果是,则下游线程也应该终止.然而,它没有,它只是坐在那里等待.它的伪代码看起来像这样:
while (!quitting) {
outputMessage = messageQueue.take (); // blocks
sendMessageToClient (outputMessage);
}
Run Code Online (Sandbox Code Playgroud)
当我测试这个时,我注意到当客户端退出时,上游线程关闭,但下游线程没有.
经过一番搔痒之后,我意识到下游线程仍在阻塞BlockingQueue,等待永远不会到来的传入消息.上游线程不会在链上向前转发QUIT消息.
如何正常关闭下游线程?想到的第一个想法是在take()调用上设置超时.我不是太热衷于这个想法,因为无论你选择什么价值,它一定不会完全令人满意.要么它太长了,僵尸线程在那里停留了很长时间才关闭,或者它太短了,连接已经闲置了几分钟但仍然有效将会被杀死.我确实想过将QUIT消息发送到链中,但是这要求它完全往返服务器,然后是应用程序,然后再次返回服务器,最后返回到会话.这似乎也不是一个优雅的解决方案.
我确实查看了Thread.stop()的文档,但显然已经弃用了,因为它无论如何都没有正常工作,所以看起来它也不是一个真正的选项.我的另一个想法是强制在下游线程中以某种方式触发异常并让它在其最终块中清理,但这让我觉得这是一个可怕而又笨拙的想法.
我觉得两个线程都应该能够自己正常关闭,但我也怀疑如果一个线程结束它还必须发出信号通知另一个线程以更加主动的方式结束,而不是简单地为另一个线程设置一个标志来检查.由于我对Java仍然不是很有经验,所以我现在很缺乏想法.如果有人有任何建议,将不胜感激.
为了完整起见,我在下面列出了Session类的真实代码,不过我相信上面的伪代码片段涵盖了问题的相关部分.全班约250行.
import java.io.*;
import java.net.*;
import java.util.concurrent.*;
import java.util.logging.*;
/**
* Session class
*
* A session manages the individual connection between a …Run Code Online (Sandbox Code Playgroud) 我在使用命名空间中的常量方面遇到了一些问题.如果我定义常量并尝试使用它,PHP似乎无法找到它.例如,在我的常量文件中,我的代码如下:
namespace \my\namespace\for\constants;
const DS = DIRECTORY_SEPARATOR;
Run Code Online (Sandbox Code Playgroud)
然后在消费文件中我有:
namespace \some\other\namespace;
use \my\namespace\for\constants\DS as DS;
echo (realpath (DS . 'usr' . DS 'local'));
Run Code Online (Sandbox Code Playgroud)
但是,不是按预期回显'/ usr/local',而是获得以下通知和空字符串.
注意:使用未定义的常量DS - 假设为'DS'
如果我更改代码如下:
use \my\namespace\for\constants as cns;
echo (realpath (cns\DS . 'usr' . cns\DS 'local'));
Run Code Online (Sandbox Code Playgroud)
我得到了预期的结果,但它显然比仅仅能够直接拉出常数更不方便.
您可以在命名空间中为别名/接口/特征添加别名,您是否也不能为常量设置别名?如果你能做到,那怎么样?
我正在尝试使用vfsStream进行单元测试文件系统交互,并且很快遇到了一个主要障碍.其中一个验证检查测试中的代码是在提供的输入路径上执行realpath()来测试它是一个实际路径而不是无意义.但是,realpath总是在vfsstream路径上失败.
以下代码演示了任何特定类之外的问题.
$content = "It rubs the lotion on its skin or else it gets the hose again";
$url = vfsStream::url ('test/text.txt');
file_put_contents ($url, $content);
var_dump ($url);
var_dump (realpath ($url));
var_dump (file_get_contents ($url));
Run Code Online (Sandbox Code Playgroud)
输出如下:
string(27) "vfs://FileClassMap/text.txt"
bool(false)
string(61) "It rubs the lotion on its skin or else it gets the hose again"
Run Code Online (Sandbox Code Playgroud)
显然,vfsStream创建了文件并将给定内容写入其中,但我无法验证它的路径是否与realpath一致.由于在实际代码中使用了realpath,我需要一种解决方法.
我真的不认为删除realpath是一种明智的方法,因为它在代码中执行一个重要的功能,并且消除一个重要的检查只是为了使代码可测试似乎是一个非常糟糕的解决方案.我还可以在测试周围放置一个if来使其可以禁用它用于测试目的,但我不认为这也是一个好主意.此外,我不想在代码中的每一点都这样做,我可能会调用realpath().第三种选择是为文件系统单元测试设置RAM磁盘,但这也不理想.您必须自己清理(这是vfsstream应该帮助您避免的必要)以及如何实际执行它将因操作系统而异,因此单元测试将不再与操作系统无关.
那么有没有办法以实际使用realpath的格式获取vfsstream路径?
为了完整起见,以下是我正在尝试实际测试的类中的代码片段.
if (($fullPath = realpath ($unvalidatedPath))
&& (is_file ($fullPath))
&& (is_writable ($fullPath))) {
Run Code Online (Sandbox Code Playgroud)
对以下内容进行重构(根据潜在的解决方案2)允许我使用vfsStream进行测试,但我认为它在生产中可能存在问题:
// If we can get a canonical path then do so …Run Code Online (Sandbox Code Playgroud) 我有一个类来计算一个数字的Luhn校验和.它将整数作为输入并返回true或false以指示有效性或其他方式,或者如果给出不适当的数据类型作为输入则抛出异常.
代码如下(完整源代码在GitHub上):
class Luhn extends abstr\Prop implements iface\Prop
{
/**
* Test that the given data passes a Luhn check.
*
* @return bool True if the data passes the Luhn check
* @throws \InvalidArgumentException
* @see http://en.wikipedia.org/wiki/Luhn_algorithm
*/
public function isValid ()
{
$data = $this -> getData ();
$valid = false;
switch (gettype ($data))
{
case 'NULL' :
$valid = true;
break;
case 'integer' :
// Get the sequence of digits that make up the number …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个自适应的多列布局(流畅,有弹性,无论你想要它),并构建了一个测试文档来尝试这个想法.
我做了一些计算来得出数字,这些数字可以让x列在页面中并排放置.2很容易(50%),4(25%)和10(10%)也是如此.如果你考虑一个保证金来留下一个阴沟并减去它,那么你得到你需要的列宽.
一切似乎进展顺利,我构建了CSS和HTML(见下文)并在Firefox中试用了它并且一切正常.但是,当我在Opera,Chrome和Safari中试用它时,我遇到了一个问题.当彼此相邻放置时,列似乎总计不超过100%,它们似乎略微缩短.列数越多,问题就越严重.通过10列,问题非常明显.
为什么会这样?Firefox的行为是正确的,还是在其他浏览器中发生的事情是什么意思?更重要的是,我如何解决它在所有浏览器中产生一致的结果?
我已经构建了一个下面代码的JSFiddle,可以在这里找到.完整的测试页面也可在此处获得.(JSfiddle只是相关代码,而整页还有其他内容)
用于执行列的CSS如下:
.columnHolder {
overflow: hidden;
background: #EFE; /* For layout testing only! */
margin: .5em 0;
padding: 0;
}
.columnHolder h1 {
background: #EFF; /* For layout testing only! */
}
.column {
float: left;
margin: .5%;
background: #FFE; /* For layout testing only! */
text-align: justify;
}
.column.half {
width: 49%;
}
.column.third {
width: 32.33333%
}
.column.quarter {
width: 24%;
}
.column.fifth {
width: 19%;
}
.column.sixth {
width: …Run Code Online (Sandbox Code Playgroud) 我有一个使用泛型和对象序列化的简单服务器.(T是输入格式,U是输出格式).仅处理输入的简化版本如下所示:
public class Server <T, U> implements Runnable {
@override
public void run () {
try (ObjectInputStream inReader = new ObjectInputStream (this.connection.getInputStream ())) {
T lastObj;
while (true) {
lastObj = (T) inReader.readObject ();
System.out.println (lastObj.getClass ().getName ());
if (null != lastObj) {
this.acceptMessage (lastObj);
}
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger (this.getClass ().getName ()).log (Level.SEVERE, ex.getMessage (), ex);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我启动服务器
Server <Integer, String> thisServer = new Server ();
Run Code Online (Sandbox Code Playgroud)
那么我希望它只接受Integer对象并返回Strings作为输出.
但是,我使用的是从System.in读取的简单客户端,用于测试和发送字符串到服务器.令我惊讶的是,服务器接受了输入.只是为了确保它真的接受了一个非TI类型的对象,添加了一行来回显出最后一个对象是什么类.
System.out.println (lastObj.getClass ().getName ());
Run Code Online (Sandbox Code Playgroud)
这确实输出了Java.lang.String. …
php ×6
html ×2
java ×2
alias ×1
constants ×1
css ×1
factory ×1
generics ×1
google-api ×1
html5 ×1
int ×1
jquery ×1
metadata ×1
mocking ×1
namespaces ×1
oauth-2.0 ×1
phpunit ×1
validation ×1
vfs-stream ×1