我最近开始构建我已有一年历史的自定义 MVC 框架的第 2 版。它对我的许多项目都非常有用,但我确实看到了改进的空间。它缺少一些主要功能,如 ACL、表单验证和缓存。尽管我很想自己构建这些部件,但我知道这实际上不是一个明智的决定。因此,我开始研究 Zend Framework 1.9。我真的很喜欢它的组件库是如何松散耦合的。但是,从不同的教程来看,它似乎很冗长。我见过一些示例应用程序,我可以使用我自己的框架使用更少的代码来复制它们。因此,我想“重新定义”其中的大部分内容以使其对 RAD 更加友好。因此,在我投入大量时间深入研究该框架之前,我希望有人能为我阐明这个主题。我本质上是一名编码员,如果它有坚实的基础(我希望 ZF 有),花几个小时调整和定制一些东西没有问题。
我应该指出,我很高兴看到 Doctrine 可以与 ZF 集成。
如果 ZF 不容易扩展,还有哪些其他框架(也有 ACL、表单验证、缓存)?我一直在研究 Symfony,但整个 Configuration over Convention 的事情让我很困扰。
在此先感谢您的任何意见。
编辑
要回答 tharkun 的问题,我所说的“可轻松扩展”的意思是我可以推出自己的类(可能扩展也可能不扩展 ZF 类)并将它们打包到框架中,这样我就可以轻松地为自己构建代码基础项目。
最佳答案
在流行的 PHP 框架中,ZF 无疑是最容易扩展的框架,尤其是因为松耦合。
感谢您的澄清。
您描述的正是 ZF 擅长的,但我想说这也正是 OOP 擅长的,所以我认为不支持这种情况的 OO 框架是垃圾箱的情况。
无论如何。对于 ZF,通常以将自己的库保存在与 ZF 文件夹结构平行的结构中的方式完成。您可以使用 ZF 自动加载器并通过将库文件夹添加到命名空间来向自动加载器注册您的库文件夹。示例:
//this will be the only require needed for your whole application
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('Mylibrary_');
在 Mylibrary 中,您应该遵循 ZF 命名约定。假设您想扩展 Zend_Db_Table_Abstract 类。这个类在逻辑上位于 Zend/Db/Table/Abstract.php 下。您的图书馆现在应该复制该结构:Mylibrary/Db/Table/Abstract.php。您将在该文件中命名您的类(class):
class Myproject_Db_Table_Abstract extends Zend_Db_Table_Abstract
{
/*
now you're ready to extend and override as much as you like.
and as a bonus you'll not even hav to include your library files
since your library is registered with the loader
*/
}
问这个问题的时候,你还有什么想法吗?
关于php - 扩展/修改 Zend Framework 有多容易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1502063/
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion
我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby
我想编写一个ruby脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"
这个问题有两个部分。在RubyProgrammingLanguage一书中,有一个使用模块扩展字符串对象和类的示例(第8.1.1节)。第一个问题。为什么如果您使用新方法扩展类,然后创建该类的对象/实例,则无法访问该方法?irb(main):001:0>moduleGreeter;defciao;"Ciao!";end;end=>nilirb(main):002:0>String.extend(Greeter)=>Stringirb(main):003:0>String.ciao=>"Ciao!"irb(main):004:0>x="foobar"=>"foobar"irb(main):
假设我们有A、B、C类。Adefself.inherited(sub)#metaprogramminggoeshere#takeclassthathasjustinheritedclassA#andforfooclassesinjectprepare_foo()as#firstlineofmethodthenrunrestofthecodeenddefprepare_foo#=>prepare_foo()neededhere#somecodeendendBprepare_foo()neededhere#somecodeendend如您所见,我正在尝试将foo_prepare()调用注入
假设我有一个名为Product的模型,其中有一个名为brand的字段。假设brand的值以this_is_a_brand格式存储。我可以在模型(或其他任何地方)中定义一个方法,允许我在调用brand之前修改它的值吗?例如,如果我调用@product.brand,我想得到ThisisaBrand,而不是this_is_a_brand。 最佳答案 我建议使用方括号语法([]和[]=)而不是read_attribute和write_attribute。方括号语法更短并且designedtowraptheprotectedread/writ