小编Jam*_*mes的帖子

使用数据注释进行模型验证的错误消息

鉴于以下课程:

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)

有没有干净的方式我可以给每个实例的不同错误信息ContactBook使用DataAnnotations?例如,如果PrimaryContact实例中缺少名称,则错误将显示为"需要主要联系人姓名".

我目前的解决方案是创建一个验证服务,检查模型状态是否存在字段错误,然后删除所述错误并使用我喜欢的特定语言将其添加回来.

c# validation asp.net-mvc annotations data-annotations

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

PHP自动加载器类与程序自动加载器功能?

到目前为止,我已经使用了程序独立的自动加载器函数,并使用spl_autoload_register()注册它们以自动加载我的(通常)命名空间类.最近,我注意到人们提到将自动加载器类与一些着名的PHP框架结合使用.

我的代码几乎所有代码都是面向对象的,但在这个实例中,我并没有看到在基本函数中使用类"Autoloader"的优势.在可测试性方面,我觉得在我的测试中使用class_exists()检查来验证过程函数是否正确加载文件.

所以我的问题是三个:

  1. 哪些优点或功能(如果有的话)可能会影响我重构事物并开始使用完整的对象来自动加载类文件?
  2. 在明显的OOP功能之外,我是否缺少一些明显的优势?
  3. 您能否为程序或类自动加载器提供案例?

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)

php spl autoload

15
推荐指数
1
解决办法
2831
查看次数

如何在PHP中创建列表或对象数组?

我是.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

11
推荐指数
2
解决办法
3万
查看次数

无需使用PHP进行变量赋值即可动态创建对象

我很好奇是否可以在PHP中动态创建一个对象.我以为我以前见过它.当然,我可以将它分配给一个变量,但只是想知道这是否可能.

new className()->someMethod();
Run Code Online (Sandbox Code Playgroud)

当然这会引发语法错误,所以很明显它不是那样做的(如果它甚至可能).我应该把它分配给一个变量,因为我真的没有问题这样做我只是好奇吗?


只是进一步的细节.静态方法实际上不是一个选项,因为我试图这样做的类是PHP的ReflectionMethod类.

php class object

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

assembleDebug在Android Studio中不使用Gradle2.4

我最近更新了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)

但是如果我在命令行上运行相同的命令,它就可以工作.
知道什么可能是错的吗?

android android-gradle-plugin

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

安装haxe lime错误

我最近尝试用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)

haxe lime

5
推荐指数
1
解决办法
1936
查看次数

chop()vs rtrim()

我很困惑与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

5
推荐指数
1
解决办法
2925
查看次数

判断字符串是否为驼峰命名法

我试图让 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% 驼峰命名法?


编辑

例子 …

php validation camelcasing string-formatting phpcodesniffer

5
推荐指数
1
解决办法
6003
查看次数

auto_detect_line_endings-有副作用吗?

我正在编写一个处理CSV的脚本,并且发现设置auto_detect_line_endings似乎是处理在Mac上创建的CSV的方法。
更改此设置是否有任何不利之处或副作用?我似乎什么也没发现(这引出了一个问题,为什么您不总是将其打开?)

ini_set('auto_detect_line_endings', true);

php csv

5
推荐指数
1
解决办法
3740
查看次数

PHP正则表达式匹配所有大写字母中的单词或单词组

如何使用正则表达式匹配所有大写字母的单词或单词组?

我相信我已经解决了问题的一半,虽然这可能不是正确的方法.

我试图在所有大写字母中抓住一个单词,或两个或三个 - 基本上如果它们是连续的我希望它们被捕获为一个组,而不是每个单词本身.

例如:
"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 regex

4
推荐指数
1
解决办法
4613
查看次数