HOME>WEBプログラム覚書>[CakePHP3.7]LayoutでCellを使ったら memory size エラー出る場合

[CakePHP3.7]LayoutでCellを使ったら memory size エラー出る場合

layoutファイルの中でcellをrender()するとViewでmemory size エラー出る場合がある。

どうやらViewでsetLayout()とか使ってると無限ループのようになってメモリエラーになるっぽい?? 下手なlayout設定は命取りになる模様。

Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 81 bytes) パターン

TagsというCellを使うとしてレイアウトに

\App\Template\Layout\public.ctp

  1. <?php
  2. echo $this->cell('Tags')->render();
  3. ?>

とコーディングした場合、View::initializeでsetLayout()とかlayout設定するとだめみたい。

\App\View\MyView.php

  1. <?php
  2. namespace App\View;
  3. use Cake\View\View;
  4.  
  5. class MyView extends View
  6. {
  7.     public function initialize()
  8.     {
  9.         parent::initialize();
  10.         $this->setLayout('public'); // Error: Allowed memory size of ~ になる
  11.         $this->layout = 'public'; // Error: Allowed memory size of ~ になる
  12.     }
  13. }
  14. ?>

正しいlayoutの設定

正しいかどうかは怪しいけどとりあえずAllowed memory size が出ないようにするには、

Viewの場合

\App\View\MyView.php

  1. <?php
  2. namespace App\View;
  3. use Cake\View\View;
  4.  
  5. class MyView extends View
  6. {
  7.    
  8.     $this->layout = 'public';//プロパティを宣言
  9.    
  10.     public function initialize()
  11.     {
  12.         parent::initialize();
  13.     }
  14. }
  15. ?>

Controllerの場合

\App\Controller\Pages.php

  1. <?php
  2. public function home()
  3. {
  4.     $this->viewBuilder()->setLayout('public');
  5. }
  6. ?>

テンプレートの場合

\App\Template\Pages\home.ctp

  1. <?php
  2. /**
  3.  * @var \App\View\MyView $this
  4.  */
  5.  
  6. $this->layout = 'public';
  7. ?>

のようにすると大丈夫な模様。

投稿日 2018年6月 5日 04:01
カテゴリ PHP
タグ CakePHP | エラーコード | フレームワーク
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1788

コメント

コメントする
Name
Email Address
URL