我正在构建一个大量使用Enums来自定义数据的应用程序.实质上,对象存储在数据库中,具有大约28个单独的属性.每个属性都是一个双字符字段,从SQL直接转换为Enum.
不幸的是,我还需要将这些值转换为两个不同的人类可读值.一个用于数据表上的图例,另一个用于CSS类,用于在Web应用程序前端设置图像样式.
为此,我设置了两个自定义属性并将其应用到Enum必要的位置.例如:
自定义属性界面
public interface IAttribute<T>
{
T Value { get; }
}
Run Code Online (Sandbox Code Playgroud)
自定义属性示例
public sealed class AbbreviationAttribute: Attribute, IAttribute<string>
{
private readonly string value;
public AbbreviationAttribute(string value)
{
this.value = value;
}
public string Value
{
get { return this.value; }
}
}
Run Code Online (Sandbox Code Playgroud)
从中检索自定义属性的方法 Enum
public static R GetAttributeValue<T, R>(IConvertible @enum)
{
R attributeValue = default(R);
if (@enum != null)
{
FieldInfo fi = @enum.GetType().GetField(@enum.ToString());
if (fi != null)
{
T[] attributes …Run Code Online (Sandbox Code Playgroud) 我想为WordPress构建一个小部件,它同时在首页上显示我最新的Google Reader项目,并允许从WordPress仪表板后面进行管理.我已经可以使用我在各种Google搜索中找到的代码添加我的"共享"项目,但这并不是我正在寻找的内容.
我喜欢iGoogle中Google阅读器小部件的功能,我想在WordPress仪表板上复制它,并为WordPress前端构建一个只读版本.我从哪里开始API(公共或'非官方')来构建它?
- 更新 -
我发现了一些有关身份验证协议的有限文档,但我无法实现任何功能.我可以解析一个URL来进行身份验证并获得一个直接放在浏览器中的SSID,但是GET和POST请求都是通过PHP失败的,所以我不能再进一步了.
- 更新 -
我已经将Martin Doms的C#教程的前几步转换为PHP,以便有兴趣在自己的网站上进行此操作的人.
我正在构建一个工作网站,其中一个更重要的功能是显示数据的丰富内容网格.默认情况下,它每页只显示20个项目,但我们在数据库中有大约200个项目可以进行过滤,排序和搜索.
我们的销售和营销团队还要求"全部列出"功能,以便他们可以在一个地方显示所有数据并滚动浏览而不是翻阅数据.

整个系统使用服务器端的ASP.Net MVC,客户端的jQuery和Flexigrid构建,并使用JSON通过AJAX在两者之间交换数据.
我已经得到了实际的数据传输部分非常可靠.一个20页的结果页面需要800毫秒的整个请求(通过Flexigrid向服务器POST请求并获得响应).更多的是客户端处理需要一段时间.
我可以将一些客户端处理卸载到服务器.但这会使服务器端操作花费更长时间并使文档的大小返回更大.在高速互联网连接的情况下不是问题......但事实并非如此.
我的另一个选择是尽可能多地下载数据并将大部分数据处理转移到客户端.这将请求时间减少到基本为零(仅获取更改的元素而不是整个数据集).它在具有快速CPU和大量RAM的机器上运行良好,但情况也不一定如此.
由于至少有一人将此标记为"不是真正的问题",让我澄清一下......
我在JavaScript中定义/命名对象和函数有两种不同的方法,在使用之前首先检查名称的存在.问题是,我不知道哪一个更好(从速度和可用性的角度来看),并且不可能在谷歌搜索中使用布尔运算符来弄清楚它.
我经常看到的第一个:
var myNewObject = myNewObject ? myNewObject : function () {
// Code goes here.
};
Run Code Online (Sandbox Code Playgroud)
第二个看起来更简洁,但我只看到一两个地方,所以我不知道它是否有标准甚至名称:
var myNewObject = myNewObject || function() {
// Code goes here.
};
Run Code Online (Sandbox Code Playgroud)
从功能上讲,它们都做同样的事情,它们似乎都适用于我可以测试的每个浏览器.我的问题是 - 这更好,为什么?此外,虽然第一个定义基本上是一个单行条件......第二个定义是什么?
我不喜欢拆分我的开发环境,但我为同时使用.NET系统和基于Apache的系统的客户构建项目.这意味着我不得不在Visual Studio for .NET和Dreamweaver之间分配时间,或者在基于PHP的工作的其他IDE之间分配时间.我不想使用两个IDE - 我更愿意在一个中构建所有东西.
我更喜欢VS的intellisense支持.当语法着色一致时,跟踪两个不同项目之间使用的JavaScript中的错误也更容易 - 每个IDE对文本的颜色略有不同,使得同一文件在每个环境中看起来都不同.
除了VS.Php之外,还有哪些解决方案可以为Visual Studio IDE添加PHP支持?VS.Php看起来很有希望,但我不想为可能满足我需要的东西支付任何现金.由于PHP本身是免费的,我想知道是否有人打算建立一个提供相同支持的免费扩展.这可能吗?或者我应该咬紧牙关和VS.Php一起去?
假设我将代码库作为独立的PHP类发布.然后有人在他们的应用程序中使用该库的1.0版本.后来,我发布了该库的2.0版本,并且由于任何原因,同一个人需要在他们的应用程序中并排使用1.0和2.0,因为他或我打破了与新版本的向后兼容性.
如果类名不同,那么包含和实例化两者都很容易,因为没有命名冲突.但如果类名保持不变,我们会遇到问题:
include /lib/api-1.0/library.php;
$oldlibary = new Library();
include /lib/api-2.0/library.php;
$newlibrary = new Library();
Run Code Online (Sandbox Code Playgroud)
这不会起作用,因为我们无法使用名称加载两个类Library.另一个开发人员建议使用命名空间.以下应该有效:
namespace old {
include /lib/api-1.0/library.php;
}
namespace new {
include /lib/api-2.0/library.php;
}
$oldlibary = new old\Library();
$newlibrary = new new\Library();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不是很可扩展.它适用于2实例情况(希望我不必首先使用),但要将其扩展为3,4,5或更多实例,您需要定义其他命名空间并设置,如果您没有首先使用这些名称空间,那就是一堆不必要的代码.
那么有没有办法动态创建命名空间,包含一个文件,并在一个唯一命名的变量中实例化该文件中包含的类?
让我补充一点澄清......
我正在构建一组库,供其他为几个CMS平台构建插件/模块的开发人员使用.理想情况下,每个人都会使用我的库的最新版本,但我不能保证这一点,我不能保证最终用户在新版本可用时总是升级他们的模块.
我正在尝试使用的用例是最终用户由两个不同的开发人员安装两个不同模块的用例:称为Apple和Orange.这两个模块都使用我的库的1.0版本,这很棒.我们可以实例化一次,两组代码都可以从功能中受益.
后来,我发布了一个小补丁到这个库.它的版本为1.1,因为它不会破坏与1.x分支的向后兼容性.Apple的开发人员立即更新了他的本地版本并推出了他的系统的新版本.Orange的开发人员正在度假,并没有打扰.
当最终用户更新Apple时,她会获得我库的最新维护版本.因为它是维护版本,所以假定完全替换版本1.0是安全的.所以代码只是从维护补丁中实例化了1.1和Orange的好处,即使开发人员从不打扰更新他们的版本.
甚至后来,我决定更新我的API,以便出于某种原因为Facebook添加一些钩子.新功能和API扩展改变了很多关于库的内容,因此我将版本升级到2.0以将其标记为在所有情况下可能不向后兼容.Apple再一次进入并更新了他的代码.没有什么破坏,他只是用/lib最新版本替换了他的文件夹中的库. Orange决定回到学校成为一个小丑,并且已经停止维护他的模块,所以它没有得到任何更新.
当最终用户使用新版本更新Apple时,她会自动获取我的库的2.0版本.但Orange在他的系统中已经添加了Facebook钩子的代码,因此如果默认情况下将2.0卷入他的库,就会发生冲突.因此,我不是完全替换它,而是为Apple实例化一次2.0,并且并行实例化Orange附带的1.0版本,以便它可以使用正确的代码.
这个项目的重点是允许第三方开发人员根据我的代码构建系统,而不依赖于它们是可靠的,并在他们应该的时候更新他们的代码.对于最终用户来说,没有什么可以破坏,并且当在其他人的系统中使用时更新我的库应该是一个简单的文件替换,而不是通过并更改所有类引用.
我需要编写一个将在PHP下运行的基本脚本/模板引擎.理想情况下,我就可以用(X)HTML模板混合我自己的标记语言,并通过服务器端的解析器运行文件与(X)HTML提供了一个数据库的动态替换我自己的标记.
不幸的是,就我所知的PHP和脚本而言,我不太清楚从哪里开始.我的第一直觉是通过某种正则表达式解析器运行整个文档,并将我的自定义标记映射到特定的PHP函数......但这对我来说似乎有点慢和笨拙.
哪些资源/教程/示例可以指向正确的方向?为了比较,我真的很喜欢用于.NET MVC的新Razor模板引擎...我不想完全打破PHP项目,但构建类似的东西会很棒.
好的,让我更多地完善我的解释......我为WordPress开发网站.我的很多客户都希望自定义他们的网站,但每当我开始谈论PHP时就会逃跑.这是一种脚本语言,对于非专业用户来说看起来太复杂,甚至不想引起兴趣.
我想要做的是专门为WordPress创建我自己的标记形式.因此,不应使用PHP函数调用(get_header()和get_footer()和if(has_posts())......)在主题文件,你不得不XML命名空间(<wpml:header />和<wpml:footer />和<wpml:loop> ... </wpml:loop>),其转换为同样的事情.它可以更好地将模板文件与服务器端脚本分开(有几个主题将整个PHP函数直接放在主题的PHP模板文件中!!!)并且可以使非开发人员更容易开始工作自定义WordPress主题.
考虑到这一点,已经建议的TWIG和Mackrell解决方案肯定支持在文件中嵌入脚本"nuggets"的想法,但它们并没有真正帮助我将自定义XML/XHTML标记解析为服务器端可识别的内容.码.
那么......在构建新的服务器端标记处理器时,我从哪里开始?
我开发了一个将托管在 Windows Azure 中的 MVC 应用程序。在开发过程中,我针对本地数据库和本地用户成员资格服务进行测试。在生产中,应用程序连接 SQL Azure 数据库和云托管的用户会员服务。
有时,我会使用仅存在于我的本地计算机上的用户帐户登录到该网站的本地版本。如果我忘记注销但将机器退出测试模式,事情就会开始出现问题。
我将hosts文件设置为指向应用程序 URL,127.255.0.0以便 Azure 模拟器在本地处理浏览器请求。这也意味着我的测试应用程序和生产应用程序使用相同的主机名 - 一个的 cookie 被视为另一个的有效 cookie。
如果我登录到本地系统,ASPXAUTH则会为该域创建一个 cookie,其中包含本地系统中用户的凭据。如果我忘记注销并将hosts文件切换回正常状态(浏览器请求转到实时应用程序),它会ASPXAUTH向服务器发送相同的 cookie。
由于该用户不存在于服务器上,仅存在于本地,因此任何请求都会Membership.GetUser().Email返回对象空异常。
理想情况下,我可以在请求的早期注入一些代码来检查用户是否存在。就像是:
MembershipUser user = Membership.GetUser();
if(user == null) {
FormsAuthentication.SignOut();
}
Run Code Online (Sandbox Code Playgroud)
这将自动删除ASPXAUTH无效用户的 cookie。但我该把它放在哪里呢?我开始查看我的控制器 - 所有控制器都继承自一个BaseController类,但即使将此代码放入基本控制器的构造函数中也还不够早。我也查看了Global.asax,但我不确定哪个事件最适合将此操作绑定到。
另外,我什至不确定这是正确的做事方式。如果不是,那么在像我现在这样依赖会员级别之前,确保身份验证 cookie 适用于有效用户的最佳方法是什么?
我正在与另外两个基于FireBreath的开发人员合作开发一个项目.到目前为止,我已经能够在我的机器上完美地工作,但我们需要通过Mercurial协调我们的开发.所以我将文件推送到存储库,并认为一切都很顺利.
不幸的是,这不起作用.
.vcproj组成解决方案的各种文件都包含对本地文件系统的硬编码引用.这对我来说很好,因为我没有移动项目.但是,当您尝试在具有不同文件结构(不同驱动器号,不同文件夹位置等)的另一台计算机上构建解决方案时,一切都会中断.
我使用FireBreath的标准项目生成脚本(Python),然后使用Visual Studio CMake脚本(prep2008.cmd)生成解决方案文件.我可以做些什么来调整事情,以便其他开发人员可以使用相同的代码库?
php ×3
asp.net-mvc ×2
.aspxauth ×1
ajax ×1
attributes ×1
c# ×1
cmake ×1
cookies ×1
dynamic-code ×1
enums ×1
firebreath ×1
flexigrid ×1
ide ×1
javascript ×1
markup ×1
mercurial ×1
namespaces ×1
object ×1
scripting ×1
templates ×1
vcproj ×1
wordpress ×1
xml ×1