小编Ada*_*dam的帖子

PHP:{$ foo}和$ {foo}之间有区别吗

有时您需要向PHP说明实际上变量名称是什么.我发现一位同事和我的做法略有不同.假设您有一个变量,$foo并希望输出_constant_string附加我一直在使用

return "<input type='hidden' name='${foo}_constant_string' value='true' />";
Run Code Online (Sandbox Code Playgroud)

而我的同事正在使用

return "<input type='hidden' name='{$foo}_constant_string' value='true' />";
Run Code Online (Sandbox Code Playgroud)

(稍微做作的例子来简化它).

我的快速测试没有发现明显的差异,但我很好奇:有区别吗?是否有理由偏爱另一个?

编辑:我上面的例子使用了字符串,但我的问题更为笼统 - 我应该明确地这么说.我知道你可以使用花括号进行转义,但是如果在两种使用方式之间存在(在任何情况下)差异,我都没有找到具体的观点.我得到了答案:没有字符串(这是"重复"帖子的内容),但是用于数组和对象(感谢@dragoste).

php

10
推荐指数
2
解决办法
635
查看次数

尝试在构建时构建ASP MVC视图时出错

我有一个ASP MVC 4项目.它起始于MVC 1,因此它使用旧式ASPX/ASCX视图.我希望在构建时编译视图,主要是为了获得编译时错误检查(而且,重要的是,要在Visual Studio中直接显示错误).我正在使用IIS Express作为调试服务器在Visual Studio Pro 2015中进行开发.

按照双方的MSDN,Haacked这里问题,比如这个我已经把我的.vbproj如下:

<MvcBuildViews>true</MvcBuildViews>
Run Code Online (Sandbox Code Playgroud)

并且在我的.vbproj中创建了一个任务

<Target Name="BuildViews" Condition="'$(MvcBuildViews)'=='true'" AfterTargets="Build">
  <Message Importance="normal" Text="Precompiling views" />
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

但是,在尝试构建时,这会给我一个错误:

'/ temp'不是有效的IIS应用程序.

作为文件,它只引用ASPNETCOMPILER

我已经尝试了各种替代品作为VirtualPath - 我将项目配置为在dev中作为子目录/本地运行所以我尝试了,并且.vs文件夹中的配置中的站点名称没有任何作用.

我应该更改VirtualPath(如果是这样的话)或者是否有其他配置缺少临时工作?

编辑

此外,我得到运行命令行MSBuild相同的错误.对于我的实际生产系统,我有一个脚本,它使用命令行MSBuild进行构建,然后将构建的包移动到产品服务器并进行部署.因此,在构建时不会有IIS express(或IIS运行).您是否需要连接Web服务器才能编译视图?

编辑2

我对这里对virtulPath的需求以及与Web服务器的明显连接感到困惑.一些建议的解决方案涉及配置IIS.IIS Express(我用于调试)甚至成功构建之后都不一定会运行,因为我理解它?无论如何,我的应用程序非常愉快地运行在虚拟目录中(在调试模式下为/ local),但使用它作为值不起作用.如果重要,这是我项目中.vs文件夹中applicationhost.config的相关部分(我尝试将相同的路径放入Documents/IIS Express中的applciationhost.config):

 <site name="CarWeb-Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\adam.conway\Documents\My Web Sites\CarWeb-Site" />
    </application>
    <application path="/local" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" …
Run Code Online (Sandbox Code Playgroud)

vb.net asp.net-mvc visual-studio iis-express asp.net-mvc-4

9
推荐指数
1
解决办法
715
查看次数

Perl行使用单引号比使用双引号快30倍

我们有一项任务是将二进制文件中的某些字符串更改为小写(来自mixed/upper/whatever).相关的字符串是对其他文件的引用(它与升级相关,我们也将Windows作为服务器环境从Windows迁移到Linux,因此案例突然变得很重要).我们编写了一个使用perl循环执行此操作的脚本.我们有一个包含大约300个文件的目录(目录的总大小约为150M)所以它是一些数据但不是很大的数量.

以下perl代码大约需要6分钟才能完成工作:

for file_ref in `ls -1F $forms6_convert_dir/ | grep -v "/" | sed 's/\(.*\)\..*/\1/'` 
do
    (( updated++ ))
    write_line "Converting case of string: $file_ref "
    perl -i -pe "s{(?i)$file_ref}{$file_ref}g" $forms6_convert_dir/* 
done
Run Code Online (Sandbox Code Playgroud)

而以下perl代码需要3个小时!

for file_ref in `ls -1F $forms6_convert_dir/ | grep -v "/" | sed 's/\(.*\)\..*/\1/'` 
do
    (( updated++ ))
    write_line "Converting case of string: $file_ref "
    perl -i -pe 's{(?i)$file_ref}{$file_ref}g' $forms6_convert_dir/* 
done
Run Code Online (Sandbox Code Playgroud)

有谁能解释为什么?这是$ file_ref是否作为字符串$ file_ref而不是用单引号版本中的值替换?在这种情况下,在这个版本中它取代了什么?我们想要的是用自己替换任何文件名的所有出现但是小写.如果我们在文件之前和之后运行字符串并搜索文件名,那么两者似乎都做了相同的更改.但是,如果我们对两个循环(diff firstloop/file1 secondloop/file1)生成的文件运行diff,那么它会报告它们不同.

这是在linux上的bash脚本中运行的.

linux bash perl

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

强制所有行结尾都为 LF for git

我为 Windows 和 linux 开发。我的 Linux 开发环境是在我的 Windows 主机上运行的虚拟机。我共享了一些目录(实际上是在起诉 samba,而不是内置的虚拟机共享文件夹,所以该目录实际上是在 linux 来宾上并共享给主机)

我们正在从 svn 迁移到 git。我想在我的 Windows 机器上运行 Source Tree(Linux 是无头的)来进行版本控制。但我希望所有文件都有 linux 行尾(LF)。

我尝试按照git repo 和工作副本中的Force LF eol 中的说明进行操作,但它们对我不起作用。

我已将配置设置如下:

[adamc@adamc-centos scripts]$ git config core.autocrlf
input
[adamc@adamc-centos scripts]$ git config  core.eol
lf
Run Code Online (Sandbox Code Playgroud)

我的 .gitattributes 中有以下内容(甚至强制 .sh 成为文本文件并再次指定 eol)

* text=auto
*.sh    text eol=lf
Run Code Online (Sandbox Code Playgroud)

我已经运行了那里指定的 checkout-index 命令,但我仍然有带有 Windows 行结尾的 .sh 文件!

[adamc@adamc-centos scripts]$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, …
Run Code Online (Sandbox Code Playgroud)

git newline core.autocrlf

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

如何在Visual Studio 2008中从For或For Each(如大括号,但在vb中)跳转到Next语句

有谁知道键盘快捷方式从开始跳For/ For Each(或If,While等等)块的它在Visual Studio中结束时,如果你使用vb.net?我发现以下我认为可以工作但不会:在Visual Studio中找到匹配的Brace?

在评论之后,我检查了工具/选项/环境/键盘的Edit.GotoBrace命令,该命令映射到瑞典语中的Ctrl+ å.

Vb.net本身不使用大括号,但在以下示例中:

For Each Foo in Bar
    Do lots of stuff
Next
Run Code Online (Sandbox Code Playgroud)

我本以为同一个命令应该让我从For Each"下一个" 跳到我,但它什么也没做.是否有另一个命令(或该命令应该工作但是本地有什么问题?)

vb.net for-loop keyboard-shortcuts braces visual-studio-2008

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

如何处理从ASP MVC版本4.0.0.0到4.0.0.1的转换

这是Windows更新的后续原因导致MVC3和MVC4停止工作

我还遇到了我的开发机器上的Windows更新导致我的MVC 4项目停止工作的问题.我将程序集引用更改为目标版本4.0.0.1,它开始工作.为了我.

我的问题是该应用程序然后部署在许多Web服务器上.实际上,我们有一个构建服务器,其中构建了客户版本,然后是一些Web服务器.

第一个问题:当我们在生产服务器上运行Windows更新时,旧版本的应用程序将停止工作吗?我猜这个答案是肯定的.我们还没有在构建或生产机器上运行Windows更新.

更改引用意味着它不再可以在构建计算机上构建.我可以通过将Specific Version标志设置为false并将Local Local设置为true来解决此问题.然后它建立在我的开发环境和构建服务器上.

问题:如果我的特定版本为假,检查有多松散? 它允许4.0.0.x吗?4.0.xx?4.xxx?还是xxxx?

但是,它甚至在thsi配置中构建它然后无法在测试Web服务器上运行(无法找到程序集).这里的问题是我的web.config中有以下内容(根据我从MVC 2升级到MVC 4时的微软说明):

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity culture="neutral" name="System.Web.Mvc" publicKeyToken="31BF3856AD364E35"/>
    <bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect newVersion="2.0.0.0" oldVersion="1.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect newVersion="4.0.0.0" oldVersion="1.0.0.0-3.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect newVersion="2.0.0.0" oldVersion="1.0.0.0"/>
  </dependentAssembly>
</assemblyBinding>
Run Code Online (Sandbox Code Playgroud)

问题是这条线

<bindingRedirect newVersion="4.0.0.1" oldVersion="0.0.0.0-4.0.0.1"/>
Run Code Online (Sandbox Code Playgroud)

用于System.Web.Mvc程序集.(当然,它4.0.0.0不是说4.0.0.1那一行.)如果我改回4.0.0.0测试服务器那么它就可以了.

我的问题是双重的.部分原因是我希望能够在本地和我们的构建/生产服务器上构建和运行.但是,我们遇到一些情况,我们在同一台服务器上托管了许多运行不同版本应用程序的客户.我们不能强迫所有客户立即升级到最新版本只是因为这个Windows更新修复 - 除了Web应用程序只是更大的应用程序套件的一部分,所以我们必须强制他们升级这个批次!

我想一个选项是检查每个仍在使用的旧版本,更新MVC版本号并创建一个新版本.然后,当我们更新Web服务器时,我们必须将该服务器上的所有客户更新为其当前版本的新(4.0.0.1兼容)版本.我真的希望尽可能避免更新,提交和重建那么多版本.

另一个选择是不在Web服务器上运行Windows更新,并尝试在构建计算机上安装4.0.0.0和4.0.0.1 dll.然后我们可以构建新旧版本.由于任何新版本(使用4.0.0.1)都在MVC程序集上将CopyLocal设置为true(旧版本没有),因此它们应该能够部署到Web服务器,而不会更新Web服务器本身.

问题:

  • 有谁知道是否可以同时安装两个版本?我希望我可以简单地保存4.0.0.0 dll,运行Windows更新然后复制到旧的dll和新的一起回到GAC.
  • 这个补丁修复的安全风险有多严重? 允许人们运行旧版本一段时间是一个问题吗?只是让Web服务器上的旧.dll存在安全风险,或者只针对使用它的应用程序? …

asp.net-mvc windows-update asp.net-mvc-4

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

如何从swagger codegen maven插件运行只生成目标

我正在使用 swagger codegen maven 插件从 swagger 规范生成服务器存根。如果我运行,mvn compile那么它会正确生成并编译项目。但是,有时我只想运行生成。

具体来说,我想避免编译整个项目并运行另一个在验证阶段运行的插件(checkstyles)。理想情况下,我想从 swagger 规范生成生成的类并编译这些类,而不是整个项目。

这里的用例是,在开发时,我可能需要更新规范并在整个项目无效(或不会,新规范)时重新生成。我读过你可以使用“前缀:目标”。我试过以下,但没有工作:

mvn swagger-codegen-maven-plugin:generate
mvn swagger-codegen:generate
mvn swagger:generate
mvn codegen:generate
Run Code Online (Sandbox Code Playgroud)

它给(例如)

在当前项目和存储库中可用的插件组 [org.apache.maven.plugins, org.codehaus.mojo] 中找不到前缀“codegen”的插件

我还读到您可以使用“groupid:artificatid:version_goal”,所以我尝试了:

mvn io.swagger:swagger-codegen-maven-plugin:2.4.0-SNAPSHOT:generate
Run Code Online (Sandbox Code Playgroud)

这似乎更进一步,但给出了错误

无法执行目标 io.swagger:swagger-codegen-maven-plugin:2.4.0-SNAPSHOT:generate (default-cli) on project com.carus.api.base:目标 io 的参数“inputSpec”、“language” .swagger:swagger-codegen-maven-plugin:2.4.0-SNAPSHOT:generate 丢失或无效

我的 pom 结构有点复杂。有几个 API。每个人在某些方面都是自己的项目。它们有一个共同的父 pom 和执行目标,项目 pom 只设置某些变量。用作 inputSpec 的变量在项目 pom 中定义,但在基本 pom 中定义了语言。(这里提到的 .base 项目实际上是基础 pom 所在的位置,并且是一个抽象包 ( <packaging>pom</packaging>)。如果我指定一个特定的项目,我会得到同样的错误,但指的是该项目。

问题:

  1. 我什至可以通过一个目标实现我想要的(从规范生成代码并编译该代码而不是整个项目)吗?
  2. 如何找出用于“前缀:目标”语法的“前缀”?

我最接近的是 run mvn generate-sources -Dcheckstyle.skip=true。这会生成,但我认为它不会编译生成的类。所以我必须在 Eclipse 中清理项目以触发它重新编译。

maven swagger-codegen

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

强制执行子类必须在.net中可序列化

我有一个vb.net web API中的类,我有时需要序列化.所以,我把班级标记为<Serializable>.精细.但是,它在许多层面上都有许多子类.其中一些被遗漏(或gwet错过了新的添加).如果元素为null则没问题,但如果不是则序列化失败:

[SerializationException]在Assembly'Foo,Version = 1.0.0.4866,Culture = neutral,PublicKeyToken = null'中键入'Foo.Bar'未标记为可序列化.

由于序列化是在后台使用的,为了保存状态以便以后恢复,它并不总是立即被注意到.

序列化正在使用BinaryFormatterin vb.net

有没有办法标记父类,以便所有它的子(以及它们的子项等)也必须是可序列化的?我宁愿为此获得编译时错误,而不是运行时错误.

我从一些初步的回答中意识到我的问题不够明确.我不应该使用父母孩子这两个词,因为我并不专注于继承作为班级成员的班级

<Serializable()>
Class MyObj
  Public Property foo as new Foo
  Public Property bar as new Bar
end Class
Run Code Online (Sandbox Code Playgroud)

我曾预料到这将需要Foo并且Bar可序列化,否则MyObj 不是

.net vb.net serialization

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

PHP 日期差异在 PHP 8(从 7)中与克隆日期的行为不同

我有一个 WordPress 插件,我们正在将托管从 PHP 7 升级到 8。我们有一个函数,可以从会话中的序列化日期字符串创建一个 DateTime 对象,并使用 DateTime 函数将其与现在进行比较diff。在 PHP 7 中这是有效的(例如给出 1 秒)。在 PHP 8 中,它给我们负一年加上 11 个月、29 天、23 小时、零(!)分钟和 1 秒!

我正在使用 PHP CLI 运行以下脚本。

<?php
$d = new DateTime();
echo '$d->format("r"):   ' . $d->format('r') . "\n";

sleep(1);

$n = new DateTime( $d->format('r') );

$diff_d = $d->diff( new DateTime() );
$diff_n = $n->diff( new DateTime() );

echo "\n";
echo 'print_r($diff_d)' . "\n";
print_r($diff_d);
echo "\n";
echo 'print_r($diff_n)' . "\n";
print_r($diff_n);
echo "\n";
echo 'd' …
Run Code Online (Sandbox Code Playgroud)

php datetime php-8 php-8.1

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

Spring Boot:控制每个请求的序列化响应中是否存在空字段

介绍

我们在 Spring Boot 中实现了一个 REST API。目前它在序列化时返回所有字段。所以它返回类似

{
    "foo": "A",
    "bar": null,
    "baz": "C",
}
Run Code Online (Sandbox Code Playgroud)

我们想要不返回空字段的选项,所以它只会返回

{
    "foo": "A",
    "baz": "C",
}
Run Code Online (Sandbox Code Playgroud)

对于那种情况 - 但仍然(如果bar有价值)

{
    "foo": "A",
    "bar": "B",
    "baz": "C",
}
Run Code Online (Sandbox Code Playgroud)

我知道你可以控制它不通过应用程序属性返回空值,但这是一个现有的 AI,如果字段丢失,一些针对它实现的应用程序可能会在反序列化时失败。因此,我们希望让调用客户端控制它。我们的想法是有一个您可以发送的标题:X-OurCompany-IncludeNulls; false。这将允许客户进行选择,我们最初会默认使用,true但可能会随着时间的推移以管理方式更改默认设置。

我能找到的最接近的是这是转向通过查询参数漂亮的印刷。当我尝试做类似的事情时,它适用于漂亮的打印。但是,对于包含,它适用于我启动 API 后的第一个请求,但之后每个其他请求都从第一个请求中获取值。我可以看到它正在通过断点设置它,并且我还针对相同的参数添加了漂亮打印,仅用于诊断目的。

我尝试过的细节

我们的 API 基于使用 Swagger Codegen 服务器存根生成的 API。我们使用委托模式,所以它生成一个控制器,它只有一个自动连接的委托和一个getDelegate

@Controller
public class BookingsApiController implements BookingsApi {

    private final BookingsApiDelegate delegate;

    @org.springframework.beans.factory.annotation.Autowired
    public BookingsApiController(BookingsApiDelegate delegate) {
        this.delegate = delegate;
    }

    @Override
    public BookingsApiDelegate getDelegate() …
Run Code Online (Sandbox Code Playgroud)

java spring jackson spring-boot

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

使用itextsharp将多个图像彼此相邻放在pdfcell中

我正在使用带有aspmvc项目的itextsharp来创建我的一些页面的PDF版本.我有一个非常基本的解析器,它采用简单的html(加上一些单独提供的样式信息)并创建一个pdf.当我的解析器装入一个表时,它会循环遍历行然后是单元格,为每个单元格创建一个PdfPCell.然后它循环遍历单元的子元素,将它们添加到PdfPCell.这是非常基本的,但到目前为止它对我有用.

问题是我现在有一个表,其中一列包含许多图标,表示该行的不同状态.当这些图像被添加时,在pdf中结束一个在另一个之上,而不是彼此相邻.

我用它创建图像

Dim I As iTextSharp.text.Image = Image.GetInstance(HttpContext.Current.Server.MapPath(El.Attributes("src").InnerText))
Run Code Online (Sandbox Code Playgroud)

我试过了

I.Alignment = Image.TEXTWRAP Or Image.ALIGN_LEFT Or Image.ALIGN_MIDDLE
Run Code Online (Sandbox Code Playgroud)

并添加一个文本块后面包含一个空格,但它没有帮助.我见过的唯一建议是使用I.SetAbsolutePosition().我宁愿避免绝对的位置,但我准备尝试 - 除了我无法弄清楚如何找到当前使用的X位置?

任何帮助非常感谢.

亚当

vb.net asp.net-mvc itext

2
推荐指数
1
解决办法
5377
查看次数

使用输入掩码时在掩码中指定日期格式?

我一直在使用jquery 蒙面输入插件将日期掩码应用于文本输入.这很好用,但我希望显示的掩码也显示格式.也就是说,而不是面具

__/__/____
Run Code Online (Sandbox Code Playgroud)

我希望能够通过使用掩码来指定格式,例如,

dd/mm/yyyy
Run Code Online (Sandbox Code Playgroud)

或(与当前面具看起来相同,但根本不同)

mm/dd/yyyy
Run Code Online (Sandbox Code Playgroud)

我无法看到如何使用该插件执行此操作(就我所见,它只接受一个字符作为掩码字符).是否可以使用当前插件?有谁知道一个替代插件(理想情况下使用jQuery)可以做到这一点?我找不到任何东西.

jquery date-format maskedinput

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

Ansible将任务列表包含为

我想以特定用户的身份执行某些任务列表(在剧本中)。用户实际上来自变量,但是在最小的示例中,我很难将其编码为“ dev”。(此用户确实存在)。我无法弄清楚以下原因为何不起作用

我在role / foo / tasks中的main.yml是

- include_tasks: "{{ role_path }}/tasks/content.yml"
  become: yes
  become_user: dev
Run Code Online (Sandbox Code Playgroud)

虽然content.yml仅获取当前用户:

- command: whoami
  register: whoami
- debug:
    var: whoami
Run Code Online (Sandbox Code Playgroud)

我的剧本是

- hosts: dev
  become: true
  remote_user: root  
  roles:
    - foo    
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

PLAY [dev] ********************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************************************************************************
ok: [adco-test-webdev]

TASK [foo : include_tasks] ****************************************************************************************************************************************************************************************************************************************************
included: /smbshare/ansible/roles/foo/tasks/content.yml for adco-test-webdev

TASK [foo : command] **********************************************************************************************************************************************************************************************************************************************************
changed: [adco-test-webdev]

TASK [foo : debug] ************************************************************************************************************************************************************************************************************************************************************
ok: [adco-test-webdev] => {
    "whoami": {
        "changed": true,
        "cmd": [
            "whoami"
        ], …
Run Code Online (Sandbox Code Playgroud)

ansible

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