【问题标题】:Notice (1024): Element Not Found: Elements\default.ctp [CORE\Cake\View\View.php, line 425通知 (1024):未找到元素:Elements\default.ctp [CORE\Cake\View\View.php,第 425 行
【发布时间】:2016-04-15 04:07:34
【问题描述】:

我正在尝试在创建主题时显示一条消息。添加数据库后,它成功重定向到索引,但没有显示消息,而是出现此错误。下面是我的控制器。我正在使用 cake cakephp2.x 有人告诉我在 Elements 上放一些东西。请帮我解决这个问题。提前致谢。

通知 (1024):未找到元素:Elements\default.ctp [CORE\Cake\View\View.php,第 425 行

 <?php
 class TopicsController extends AppController {

    public $components = array('Session');
    public function index(){

    }
    public function add(){

        if($this->request->is('post')){
            $this->Topic->create();

            if($this->Topic->save($this->request->data)){
                $this->Session->setFlash('Topic has been created!');
                $this->redirect('index');
            }
        }
    }

 }
?>

【问题讨论】:

  • 请检查your_app\lib\Cake\View\Elements\Flash中是否有文件default.ctp。如果不从这里github.com/cakephp/cakephp/tree/2.8/lib/Cake/View/Elements/… 下载它们,你可能会没事。
  • 什么版本的 CakePHP (2.what) 以及如何呈现您的 Flash 消息? 请编辑问题以说出/显示。如果您使用Session-&gt;setFlash,则预计您在布局中使用Session-&gt;flash
  • 嗨,我已经在 lib\Cake\View\Elements\Flash 中有 ctp 了,里面的代码是:
  • 我使用的是 cakephp 2.7.3
  • @FatalError 上面的评论不可读(也不是我要求的 - 布局 sn-p 很重要)。也许您可以帮助我了解如何让问题的作者将类似的东西放在问题中而不是 cmets?用粗体字似乎不起作用。回答您自己的问题的道具 - 尽可能不要忘记接受它。

标签: php cakephp


【解决方案1】:

谢谢,我已经注意到在 cakephp 2.7+ 中不再使用会话组件,而 flash 组件应该是一个替代品。 所以我改变了我的代码

 public $components = array('Session');

 public $components = array('Flash');

 $this->Session->setFlash('Topic has been created!');

 $this->Flash->set('The Topic has been created!');

谢谢大家。

【讨论】:

  • 只是为了澄清您的评论:会话组件仍在使用中-尚未删除。从 2.7 版开始,只有 Flash 方法已从 Session 组件中移除。
【解决方案2】:

之前:

\lib\Cake\View\Elements\Flash\default.ctp

复制元素文件夹中的default.ctp

\lib\Cake\View\Elements\default.ctp

应该这样工作。

【讨论】:

    【解决方案3】:

    复制 default.ctp 文件来自您计算机中 CakePHP 安装文件夹中的此目录

    htdocs/cake/lib/Cake/View/Elements/Flash
    

    并将default.ctp 文件的副本粘贴到 Elements 文件夹中的 Flash 文件夹之外。 在这个位置

    htdocs/cake/lib/Cake/View/Elements
    

    它会很好用。 我试过了

    【讨论】:

      【解决方案4】:

      对于包含在 Index.ctp 中的默认元素的部分视图,或者可以通过 setFlash 作为默认值。所以请包括元素 ctp 以避免问题并得到低于输出

      // 将使用/app/Plugin/Comment/View/Elements/default.ctp

      $this->Session->setFlash(
          'Example message text',
          'default',
          array('class' => 'example_class')
      );
      

      这里default应该是元素,请确保默认元素ctp可用

      在上述示例中使用$this-&gt;Session-&gt;flash() 的输出将是:

      &lt;div id="flashMessage" class="example_class"&gt;Example message text&lt;/div&gt;

      要使用插件中的元素,只需在 $params 中指定插件:

      // 将使用/app/Plugin/Comment/View/Elements/flash_no_spam.ctp

      $this->Session->setFlash(
          'Message!',
          'flash_no_spam',
          array('plugin' => 'Comment')
      );
      

      请参考以下链接:

      http://book.cakephp.org/2.0/en/core-libraries/components/sessions.html

      【讨论】:

      • 嗨,我已经在 View/Elements/default.ctp 上安装了调试工具包,我应该在元素中再创建一个 ctp 吗?
      • @FatalError: 当然你可以使用上面提到的另一个 ctp 元素作为 'flash_no_spam' 而不是默认的 ctp。
      • 我在更新时注意到这一点 SessionComponent::setFlash() 已被弃用。您应该改用 FlashComponent。我希望它可以提供任何帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2011-02-12
      • 2018-03-15
      • 2022-11-04
      • 1970-01-01
      相关资源
      最近更新 更多