質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

3477閲覧

CakePHP3エラー:Class declarations may not be nestedについて

ssk

総合スコア332

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/04/11 06:19

###エラーメッセージ

PHP

1Fatal error: Class declarations may not be nested in

###コード

PHP

1public function export(){ 2 $results = $query = $this->Hoges->find('all'); 3 4 // 改行コードをPHP_EOLからCR+LFに置換するフィルタ 5 class eol_filter extends php_user_filter { 6 function filter($in, $out, &$consumed, $closing) { 7 while ($bucket = stream_bucket_make_writeable($in)) { 8 $bucket->data = str_replace(PHP_EOL, "\r\n", $bucket->data); 9 $consumed += $bucket->datalen; 10 stream_bucket_append($out, $bucket); 11 } 12 return PSFS_PASS_ON; 13 } 14 } 15 16 // 文字コードをUTF-8からShift-JISに置換するフィルタ 17 class encode_filter extends php_user_filter { 18 function filter($in, $out, &$consumed, $closing) { 19 while ($bucket = stream_bucket_make_writeable($in)) { 20 $bucket->data = mb_convert_encoding($bucket->data, 'SJIS-win', 'UTF-8'); 21 $consumed += $bucket->datalen; 22 stream_bucket_append($out, $bucket); 23 } 24 return PSFS_PASS_ON; 25 } 26 } 27 28 // フィルタを登録 29 stream_filter_register("eolFilter", "eol_filter"); 30 stream_filter_register("encodeFilter", "encode_filter"); 31 32 $fp = fopen('php://output', 'w'); 33 34 // フィルタを開いたストリームに付加する 35 stream_filter_append($fp, "eolFilter"); 36 stream_filter_append($fp, "encodeFilter"); 37 38 // ダウンロードさせる 39 header("Content-Type: application/octet-stream"); 40 header("Content-Disposition: attachment; filename=".$this->filename); 41 42 // 検索結果を書き込む 43 foreach ($results as $data) { 44 fputcsv($fp, $data); 45 } 46 47 fclose($fp); 48 }

###参考サイト
CSV出力
エラーの原因

###その他
クラスフィルタの書き方がいけないのでしょうか?
変数を変更してみても同じエラーが出てしまいます。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Class declarations may not be nestedを日本語訳すれば明らかですが、クラス内(メソッド内も含む)で別のクラスを定義することはできません。

eol_filterencode_filterの定義をクラス外に出して下さい(グローバル関数の中でも問題はありません)。

投稿2017/04/11 06:22

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2017/04/11 06:34

ありがとうございます。  classを外に出したところ Class 'App\Controller\php_user_filter' not found とエラーが表示されてしまいます。 フィルタクラスはどのように読み込めばいいでしょう、、
maisumakun

2017/04/11 06:39

グローバルのクラスですので、「extends \php_user_filter」とする必要があります。
ssk

2017/04/11 06:43

読むことができました! 最後にもう1つだけ質問させて下さい。 以下のエラーの原因はなんでしょう、、 Warning (2): stream_filter_append(): user-filter "eolFilter" requires class "eol_filter", but that class is not defined
ssk

2017/04/11 08:19

質問の内容を解決しましたので、解決と致します。 解答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問