【问题标题】:What is the right way to pass parameters to a Kohana 3.3 controller called through HMVC?将参数传递给通过 HMVC 调用的 Kohana 3.3 控制器的正确方法是什么?
【发布时间】:2014-02-03 18:11:17
【问题描述】:

我正在尝试使用 Kohana 3.3 HMVC 方法。我创建了一个视图和一个控制器,用于生成一个页面段(旨在由另一个控制器集成到实际网页中,并且永远不会从控制器外部通过 HTTP 访问)填充通过 ORM 检索的数据记录。我需要的是通过中间控制器将一些数据(记录选择标准)从顶部控制器传递到 ORM 模型。按照here 的建议更改 GET/POST 数据似乎很古怪(因为据我所知,它将更改整个应用程序状态而不是目标控制器的状态)(但也许在 PHP 世界中它被认为是可以的,我不知道)不知道(我来自严格的 C++/C#/Java/Scala 世界),如果是,请告诉我)。有没有更好的办法?

【问题讨论】:

    标签: php kohana hmvc kohana-3.3


    【解决方案1】:

    HMVC 方法的工作方式与普通请求一样,只是它有自己的请求类实例。从 HMVC 子请求中,您可以通过加载初始请求来访问父请求对象。

     $parent_request_query = $this->request->initial()->query();
    

    您还可以访问当前请求。

     $current_request_query = $this->request->current()->query();
    

    你也可以只传递参数。

     $params = array(
          'passing' => 'data' 
     );
     echo Request::factory('controller/action')->query($params)->execute()->body()
    

    【讨论】:

    • 所以你说当我从控制器 A 调用时我打算将数据传递给控制器​​ B 的方式是设置控制器 A 的字段(比如它的公共属性或实际修改 GET/POST)并在控制器 B 中读取它们?
    • 我就是这样做的。我尽量让每个子 HMVC 段保持独立。让子段自行获取其变量使其非常独立。
    • 对了,你能解释一下为什么$this->request->current()->query('id');在子控制器中(通过Request::factory调用)而$this->request->param('id');在顶层控制器中(直接通过http请求路由调用)?第二个版本在第一种情况下不起作用,第一个在第二种情况下不起作用(我在这两种情况下都尝试过,试图使用相同的版本来使代码更漂亮)。
    • 当调用传递给子请求的参数时,我使用 $this->request->query()。如果我想获得原始查询参数,我会使用 $this->request->initial()->query()。但是,我不完全确定我是否理解您的要求。也许您可以发布更详细的问题。
    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多