2013-06-05 140 views
5

我正在一个项目上工作,我很困惑,因为把什么代码放在哪里。 我会在这里举一个简单的例子来说明为什么我有点困惑。CakePHP的组件VS VS Libs和shell

想象一下在cakephp应用程序中可以创建一个帐户的几个网页 - 可以创建一个帐户 - 与这个帐户一起,需要调用模型和库中的几个其他功能(例如,压缩某些东西,创建一个证书帐户,...)。

看到,因为它需要在多个地点进行,不会在型号相当属于(+是相当长的一段代码),最好的办法就是用我以为组件。

这只要你后面的Web服务器的伟大工程,但如果我也希望有所有的壳牌可用的功能是什么? - 那么我不能使用组件,只能加载库。

这是对所有的功能/ PHP代码我能/要共享,以在两个外壳如在控制器中可用的所有逻辑的情况。

这里来的问题:) => 所以我所有的组件都需要libs吗?在这些libs中加载模型/其他libs是否在体系结构上是正确的?那么什么是组件的使用呢? 'rm -rf'他们,只使用库?

到目前为止我已经使用的部件,所述的方法是把所有的可/需要被在它们的控制器之间共享的流程逻辑。 我不需要任何模型或者只是静态函数的集合(例如操纵图像)时使用的Libs。 这样做是因为我在使用Shell脚本时想要/需要访问这些组件中的逻辑。

任何想法是在我的理解出错的地方?

回答

4

你已经给出了所有的答案!

是的,组件可以在控制器之间共享功能。只有控制器。 因此,如果您需要模型或外壳中的功能,而不是错误放置的功能。

你应该把代码,就是用我的外壳和控制器两到模型层(如果它的模型/ DB相关)或库(静态/ calc的东西等)。 然后那些可以从双方使用。

您可以在libs和vica中使用模型。只要小心不要造成太多依赖和循环关系。那些也很难测试/扩展/修改。

组件是做一些更AUTOMAGIC和控制器的具体经办有用包一个快速和方便的控制器访问那些LIB /模型的方法和也。 与仅包装CakeSession类以在控制器中提供简单会话访问的SessionComponent类似。顺便说一下:您也可以在使用任务的命令行环境中执行相同的便利包装。那些都不是“炮弹的组件”。

+0

感谢您验证我的初步想法! 不想将代码放置在错误的位置,因为它会阻碍我在以后的开发/扩展。 – Crazy