我最近开始构建我一年的自定义MVC框架的第2版。在许多项目中,它对我很有用,但我确实看到了改进的空间。它缺少一些主要功能,如ACL,表单验证和缓存。尽管我自己喜欢自己构建这些部件,但实际上我知道这不是一个明智的决定。所以,我开始研究Zend Framework 1.9。我真的很喜欢它的组件库松散耦合。但是,通过查看不同的教程,它看起来非常冗长。我已经看到了一些示例应用程序,我可以用我自己的框架使用更少的代码复制。因此,我想“重新定义”它的大部分内容,以使其更加友好。因此,在我花费大量时间深入研究框架之前,我希望有人可以为我阐明这个主题。我是一个内心的编码员,如果它有一个坚实的基础(我希望ZF有),可以花几个小时调整和定制一些东西。
我应该注意到,我很高兴看到Doctrine可以与ZF集成。
如果ZF不易扩展,还有其他框架(还有ACL,表单验证,缓存)?我一直在看Symfony,但整个Configuration over Convention事情让我很烦恼。
提前感谢任何输入。
修改
要回答tharkun的问题,我的意思是'易于扩展'是我可以滚动自己的类(可能会或可能不会扩展ZF类)并将它们打包到框架中,以便我可以轻松地为自己构建代码的基础项目。
答案 0 :(得分:8)
在流行的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 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
*/
}
在提出这个问题时,您还有其他想法吗?
答案 1 :(得分:2)
我通过扩展ZF开发了自己的框架。而且我可以告诉你它可以轻松完成。你可以使用你想要的东西,并且很容易地替换你不想要的东西。 完全ZF遵循OOP到核心。他们到处使用最佳做法。我通过观察它的代码学到了很多东西。
我个人认为ZF是我见过的最好的PHP框架。
答案 2 :(得分:1)
个人Zend FW是我的最爱。它踢屁股。期。尽管如此,你必须成为一名能够欣赏它的人。它可以变得非常抽象。
回答你的问题; Zend FW是非常可扩展的,一切 - 真的是一切 - 都可以扩展。类命名约定是; 类Zend_This_IsAn_Example可以在/library/Zend/This/IsAn/Example.php中找到,您可以将其扩展为Whatever_This_IsAn_Example,它将放入/library/Whatever/This/IsAn/Example.php 它还具有您可以启用的自动加载功能,因此您不必再使用require_once类文件了。
mvc结构;
/应用 /应用/控制器 /应用/等 /应用/型号 /应用/视图 /图书馆 /图书馆/ Zend公司 /库/自定义 /公共
结帐http://framework.zend.com/manual/en/introduction.html和http://framework.zend.com/docs/quickstart
答案 3 :(得分:1)
它并不完美 - 在ZF中存在使用静态成员和具体类依赖性的趋势 - 但是其中一些已经在框架的后续版本中得到了解决。我想说,与其他类似的框架相比,ZF表现不错。事实上,松耦合可能是该框架的最大卖点。
答案 4 :(得分:0)
扩展Zend Framework几乎没有问题。
通常的做法是设置与Zend Framework Library共存的某种“myExtenions”。例如,您可以查看:
答案 5 :(得分:0)
重点是您可以轻松编写接口代码。你对Zend_Acl_Resource的实现不满意吗?创建自己的资源类,实现Zend_Acl_Resource_Interface:)