将对象属性传递给下一个的简单方法

时间:2013-01-05 08:54:05

标签: php

这可能有点难以理解,所以如果不够清楚,我会事先道歉。

我正在编写自己的MVC框架并再次陷入困境。

我正在为框架编写控制器类。基本上这就是它的工作原理:

  • 实例化扩展抽象类
  • 的类coreController
  • coreController通过解释查询字符串
  • 设置要加载的控制器
  • 查询存储在变量中的字符串值
  • 其他变量赋值
  • 已加载新控制器
  • 新控制器检查是否需要实例化操作对象。
  • 已加载新的actioncontroller
  • 动作控制器检查它是否是所需的最终对象。
  • 操作控制器作为要在脚本其余部分期间引用的对象返回。
可以调用

泛型$ controller-> method()并引用最终控制器加载。

另一个概述:

coreController
    pageController
       pageControllerActionAdd
       return as object to start

$controller->something(); //References pageControllerActionAdd

基本上我想要做的就是输入一个网址: http://www.mywebsite.com/page/modify/

并让脚本将PageModifyController作为变量拉出来,这样我就可以执行它的方法了。

如果你能告诉我一个更好的方法来做我正在做的事,请继续。你不必编写任何代码,只是想法会很棒。只是我目前正在做的方式非常混乱,难以调试。我将最终得到多个嵌套对象,我不喜欢它的概念。

我一直在阅读很多其他源代码,发现它也很复杂。

1 个答案:

答案 0 :(得分:1)

我实际上创建了一个框架,可以按照您要实现的方式工作。我认为你缺少的是RoutingHandler类。路由是对URL的物理操作,它告诉应用程序要加载哪个Controller,以及要运行哪个Action。

在我的世界里我也有模块,所以基本的路由方案是

Module -> Controller -> Action

这三个项目以这种方式映射到我的URI方案。变量也可以像这样附加......

http://www.domain.com/module/controller/action/var1/val1/var2/val2

那么,在解析URI之后会发生什么,并将控制权传递给适当的控制器和操作?让我们编写一些代码来演示一个简单的例子......

<?php    
    class indexController extends Controller {

        protected function Initialize() {
            $this->objHomeModel = new HomeModel;

            $this->objHeader = new Header();
            $this->objFooter = new Footer();

            $this->objHeader
                ->SetPageId('home');
        }

        public function indexAction() {
            $this->objHeader->SetPageTitle('This is my page title.');
        }

        // other actions and/or helper methods...
    }
?>

Initialize方法中,我设置了一些控制器范围的内容,并抓取我的模型实例以便稍后使用。真正的肉是indexAction方法。您可以在此处设置要在View中使用的内容。例如......

public function randomAction() {
    $this->_CONTROL->Append($intSomeVar, 42);
}

_CONTROL是一组值,我操纵并传递给View。 Controller类知道如何为View找到正确的模板,因为它以Action命名(并在兄弟目录中)。

Controller父类采用动作方法的名称并像这样解析...

indexAction -> index.tpl.php

你也可以在这里做一些有趣的事情,例如......

Application::SetNoRender();

...会告诉Controller不要在模板中渲染,而只是完成方法。这对于您实际上不想输出任何内容的情况非常有用。

最后,所有控制器,模型和视图都在它们自己的Module目录中,就像这样......

my_module
    controllers
        indexController.class.php
        someotherController.class.php
        :
        :
    models
        HomeModel.class.php
        :
        :
    templates
        index.tpl.php
        someother.tpl.php
        :
        :

我可以拥有所需数量的模块,这意味着我可以通过模块和/或控制器分离出功能。

我可以继续,但我是从记忆中写下来的,这里和那里都有一些皱纹,但希望这给你提供了思考的食物。