【问题标题】:How get name of current model this view context is attached to?如何获取此视图上下文附加到的当前模型的名称?
【发布时间】:2010-12-02 19:43:00
【问题描述】:

在 API 中,调用 $this->model 将返回模型的名称,但它不起作用。

http://api13.cakephp.org/class/view

api cakephp 是假的吗?甚至 $view->modelId 也不起作用。

【问题讨论】:

    标签: cakephp cakephp-1.3


    【解决方案1】:

    在控制器中:

    $this->modelClass
    

    【讨论】:

    • 这部分正确,因为如果模型是插件的一部分,它将返回包含插件的名称(例如,Plugin.Model)。您可能需要拆分名称
    【解决方案2】:

    试试这个

    Inflector::classify( $this->params['controller']);
    

    这应该将您的控制器名称更改为模型名称。当然,您可以从视图级别执行此操作。

    【讨论】:

    【解决方案3】:

    是的,你可以,你需要告诉你的模型告诉它的名字。所以在你的模型中写一个函数,比如:

        function myname(){
        return $this->name;
    }
    

    现在你的控制器可以向你的模型询问他们的名字了。

    【讨论】:

      【解决方案4】:

      使用Inflectors 来实现您想要的结果:

      <?php $model = Inflector::camelize(Inflector::singularize($this->params['controller'])); ?>
      

      【讨论】:

        【解决方案5】:

        你不能。那是因为视图的父级是一个控制器(您也不能访问它),并且该控制器可以有多个模型。

        如果您尝试在视图中访问模型的名称,很可能您做错了什么,或者您还没有理解 MVC 设计模式。

        我想不出模型名称与视图相关的一种情况。我坚持,你做错了什么。

        【讨论】:

        • “我想不出模型名称与视图相关的一种情况” - 探索 cakePHP 的工作原理?
        • 如果您需要在可视菜单上突出显示所选部分,我会发现它很有用。还是我也错过了什么?
        • 当你需要在一个元素中动态创建一个表单时呢?
        【解决方案6】:

        试试这个:

        $view =& ClassRegistry::getObject('view');
        $models = $view->params['models'];
        

        【讨论】:

          【解决方案7】:

          如果您遵循 CakePHP 约定和规则,模型名称与控制器名称相同,但单数时,控制器名称应为复数,因此要在 View 中获取控制器名称,只需添加以下内容:

          <?php
          $controller = $this->name
          

          视图中的模型名称将是:

          $model = trim($controller , "s");
          

          这是在视图中获取模型名称的唯一方法

          【讨论】:

          • 坏主意,看看这个例子:Territory > Territories,这不适用于你的代码。
          • @ToniAlmeida 是对的,请改用Inflector::singularize($controller)。如果您的控制器 /starts/ 带有“s”,这也可能会产生奇怪的结果。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-02
          • 1970-01-01
          • 2011-09-17
          相关资源
          最近更新 更多