HTML5增加了在不需要使用JavaScript的情况下更好地定义表单中的客户端验证的能力.这个概念已经存在,例如"maxlength"和"minlength".它已经扩展了"必需"和"模式"等属性.但是,HTML5还定义了对这些属性的限制,而WebKit浏览器已经实现了这些限制(可能与Firefox和Opera相差不远).
该问题的限制有当CSS/JavaScript的使用隐藏的表单控件的知名度做display: none或visibility: hiddenCSS规则.限制定义为:
4.10.7.1.1隐藏状态
当
input元素的type属性处于Hidden状态时[...]input元素表示不打算由用户检查或操纵的值.[也,]
- 该
valueIDL属性适用于这个元素,并在模式默认.- 下面的内容属性,不得指定,并不适用于元素:
accept,alt,autocomplete,checked,dirname,formaction,formenctype,formmethod,formnovalidate,formtarget,height,list,max,maxlength,min,multiple,pattern,placeholder,readonly,required,size,src,step,和width.- 下列IDL属性和方法并不适用于元素:
checked,files,list,selectedOption,selectionStart, …
我一直被教导在编程中使用异常可以从引发错误的对象中抽象出错误处理。看PHP手册,好像PHP有一个Exception类和一个ErrorException类,说明并不是所有的异常都一定是错误。因此,我想使用它们来帮助进行页面重定向。
我想要一个硬重定向,只发送标题而不发送页面内容。触发此操作的最佳方式是什么?假设我有一个Controller带有方法的类redirect()。
该方法应该如下所示:
class Controller {
public function redirect($path) {
throw new Exception($path, 301);
}
}
...
try {
$controller->redirect('http://domain.tld/redirected');
} catch (Exception $e) {
if ($e->getCode() == 301) {
header('Location: ' . $e->getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
class Controller {
public function redirect($path) {
header('Location: ' . $path);
throw new Exception('The page is being redirected', 301);
}
}
...
try {
$controller->redirect('http://domain.tld/redirected');
} catch (Exception $e) {
if ($e->getCode() == 301) { …Run Code Online (Sandbox Code Playgroud) 假设我有一个接口,它定义一组数据的有效值:
interface Foo {
bar: boolean;
}
Run Code Online (Sandbox Code Playgroud)
我希望一个类能够使用方法公开该数据。我发现如果我用它keyof T来定义键,它工作得很好:
abstract class Getter<T> {
private data: T;
get<K extends keyof T>(key: K): T[K] {
return this.data[key];
}
abstract use(): void;
}
class ExtendedGetter<T extends Foo> extends Getter<T> {
use() {
this.get('bar'); // OK
}
}
Run Code Online (Sandbox Code Playgroud)
但是,将键限制为仅接受以下字符串会Extract<keyof T, string>导致错误:
abstract class Getter<T> {
private data: T;
get<K extends Extract<keyof T, string>>(key: K): T[K] {
return this.data[key];
}
abstract use(): void;
}
class ExtendedGetter<T extends Foo> extends Getter<T> { …Run Code Online (Sandbox Code Playgroud)