鉴于以下课程:
using System.ComponentModel.DataAnnotations;
public class Book{
public Contact PrimaryContact{get; set;}
public Contact SecondaryContact{get; set;}
[Required(ErrorMessage="Book name is required")]
public string Name{get; set;}
}
public class Contact{
[Required(ErrorMessage="Name is required")]
public string Name{get; set;}
}
Run Code Online (Sandbox Code Playgroud)
有没有干净的方式我可以给每个实例的不同错误信息Contact
中Book
使用DataAnnotations
?例如,如果PrimaryContact
实例中缺少名称,则错误将显示为"需要主要联系人姓名".
我目前的解决方案是创建一个验证服务,检查模型状态是否存在字段错误,然后删除所述错误并使用我喜欢的特定语言将其添加回来.
到目前为止,我已经使用了程序独立的自动加载器函数,并使用spl_autoload_register()注册它们以自动加载我的(通常)命名空间类.最近,我注意到人们提到将自动加载器类与一些着名的PHP框架结合使用.
我的代码几乎所有代码都是面向对象的,但在这个实例中,我并没有看到在基本函数中使用类"Autoloader"的优势.在可测试性方面,我觉得在我的测试中使用class_exists()检查来验证过程函数是否正确加载文件.
所以我的问题是三个:
UPDATE
下面是我可能使用的典型自动加载功能的一些示例代码.它是元代码,所以不要寻找错别字.我组织我的目录结构,以便它们镜像命名空间.从explode_namespaces()
理论上讲,假设函数可以作为静态方法与autoload()
类中的静态方法一起包含在内,这是一个好处.将这些不同的"实用程序"函数组合为单个类中的方法可能更清晰.
function autoload($class_name)
{
$root = APP_LIBS; // a directory path constant set at config time
if ($namespaces = explode_namespaces($class_name)) {
$domain = array_shift($namespaces);
$root .= "/$domain/";
$class_name = array_pop($namespaces);
$directories = array();
foreach ($namespaces as $directory) {
$directories[] = $directory;
}
$root .= implode($directories, '/');
}
$file = "$root/$class_name.php";
if (file_exists($file)) {
include $file;
}
}
Run Code Online (Sandbox Code Playgroud) 我是.net程序员vb&c#,但我似乎无法弄清楚如何将我的对象变成PHP中的列表或数组.
var mylist = new List<myobject>();
mylist.add(myobject1);
mylist.add(myobject2);
Run Code Online (Sandbox Code Playgroud)
我试过了什么
产品是以下集合的财产orderitems
:
$this->Products = getOrderItems();
public function getOrderItems()
{
$items = array();
$count = 0;
// connect to db, query.....
while($row = mysql_fetch_array($result, MYSQL_BOTH)){
$count++;
$items[$count] = ($row);
}
echo 'Count of Order Items...' . $count;
return $items;
}
Run Code Online (Sandbox Code Playgroud)
我甚至关闭了吗?
我很好奇是否可以在PHP中动态创建一个对象.我以为我以前见过它.当然,我可以将它分配给一个变量,但只是想知道这是否可能.
new className()->someMethod();
Run Code Online (Sandbox Code Playgroud)
当然这会引发语法错误,所以很明显它不是那样做的(如果它甚至可能).我应该把它分配给一个变量,因为我真的没有问题这样做我只是好奇吗?
只是进一步的细节.静态方法实际上不是一个选项,因为我试图这样做的类是PHP的ReflectionMethod类.
我最近更新了gradle-wrapper.properties
文件以使用gradle-2.4.
这是我新的更新gradle-wrapper.properties
文件:
#Sun Dec 21 21:28:27 GMT+05:30 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip
Run Code Online (Sandbox Code Playgroud)
在此更新后,我运行了clean命令,以便它使用2.4和2.2.1(旧版本).
现在,如果我./gradlew assembleDebug
在Android studio中使用命令,则会抛出以下错误:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':ActiveAndroid:compileDebugTestAidl'.
> Executor Singleton not started
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Run Code Online (Sandbox Code Playgroud)
但是如果我在命令行上运行相同的命令,它就可以工作.
知道什么可能是错的吗?
我最近尝试用haxe/lime开发,我有两件事吓坏了我.1.我尝试通过此命令安装Lime:
> haxelib install lime
haxelib run lime setup
Run Code Online (Sandbox Code Playgroud)
并在"c:/"中自动安装Lime,我需要将文件移动到"lib"到haxe文件夹.
2.当我在FD中打开Lime项目时,我收到此错误:
> Called from ? line 1
Called from CommandLineTools.hx line 995
Called from CommandLineTools.hx line 23
Called from CommandLineTools.hx line 108
Called from CommandLineTools.hx line 190
Called from platforms/FlashPlatform.hx line 91
Called from /usr/lib/haxe/std/neko/_std/sys/io/File.hx line 30
Uncaught exception - Invalid field access : __s
Run Code Online (Sandbox Code Playgroud)
当我尝试构建项目时,我收到此错误:
> Warning: Could not find template file: flash/hxml
Warning: Could not find template file: flash/haxe
Fatal error: exception Failure("File not found bin/flash/haxe/release.hxml")
Build halted …
Run Code Online (Sandbox Code Playgroud) 我很困惑与PHP函数rtrim()
和chop()
,因为他们的工作类似,给类似的输出.为什么修剪尾随字符有不同的功能?
示例示例:
PHP
$str = "Hello World!";
echo $str . "<br>";
echo rtrim($str,"World!") . "<br>"; //Hello
echo chop($str,"World!") . "<br>"; //Hello
Run Code Online (Sandbox Code Playgroud)
chop()
和rtrim()
功能之间有什么区别吗?
我试图让 PHP_CodeSniffer 检查类名中的驼峰命名法,但在我看来,驼峰命名法检查是不可能的(没有字典,包括技术单词)。
我已经在互联网上搜索过,但到目前为止,我看到的唯一选择是字符串是否有一些通用的分隔符来爆炸 - 即下划线、单词之间的空格等。
即使这也没有什么用处,因为只有当名称准确/始终在每个单词之间包含分隔符时,检查才能准确。
“检查”的目的是确定名称的格式是否不正确,这可能包括不正确的定界。
此外,PHP_CodeSniffer 上的资源要么很少见,要么非常基础和技术性,只有作者/开发人员才能理解。
我在一些当前的 Sniffs(即 Squiz 和 PEAR 标准)中找到了这段代码:
if (PHP_CodeSniffer::isCamelCaps($functionName, false, true, false) === false)
Run Code Online (Sandbox Code Playgroud)
但是,我查看了 PHP_CodeSniffer 核心代码,该函数仅执行以下操作:
// Check the first character first.
// Check that the name only contains legal characters.
// Check that there are not two capital letters next to each other.
// The character is a number, so it cant be a capital.
Run Code Online (Sandbox Code Playgroud)
这些基本检查总比没有好,尽管可以说对于其预期目的来说毫无用处,因为它们根本不检查驼峰命名法。
Sniff(或 PHP 脚本)如何知道在给定字符串中检查哪些“单词”以识别该字符串是否为 100% 驼峰命名法?
我正在编写一个处理CSV的脚本,并且发现设置auto_detect_line_endings似乎是处理在Mac上创建的CSV的方法。
更改此设置是否有任何不利之处或副作用?我似乎什么也没发现(这引出了一个问题,为什么您不总是将其打开?)
ini_set('auto_detect_line_endings', true);
如何使用正则表达式匹配所有大写字母的单词或单词组?
我相信我已经解决了问题的一半,虽然这可能不是正确的方法.
我试图在所有大写字母中抓住一个单词,或两个或三个 - 基本上如果它们是连续的我希望它们被捕获为一个组,而不是每个单词本身.
例如:
"HAPPY BIRTHDAY TOMMY"不会匹配并返回[0] -> HAPPY, [1] -> BIRTHDAY, [2] -> TOMMY
,但是整个组,例如[0] -> HAPPY BIRTHDAY TOMMY
.
我在下面使用的代码一起匹配"HAPPY BIRTHDAY",或者只是"TOMMY",但不是所有的东西.
[A-Z]{1,}\s[A-Z]{1,}|\b[A-Z]{1,}\b
Run Code Online (Sandbox Code Playgroud) php ×7
validation ×2
android ×1
annotations ×1
asp.net-mvc ×1
autoload ×1
c# ×1
camelcasing ×1
class ×1
csv ×1
haxe ×1
lime ×1
object ×1
regex ×1
spl ×1