出来心だったんです。
やりたかったことは本当に単純で
テストで追加したブロックを消したかっただけだったのです。
これは流石に3.0.2では直るでしょう、たぶん。
お約束のログ確認
[2015-07-17 06:01:43] myapp.INFO: > POST /eccube-3.0.1/html/sogakudo_admin/content/block/11/delete [] [] [2015-07-17 06:01:43] myapp.CRITICAL: BadMethodCallException: Undefined method 'getTemplatePath'. The method name must start with either findBy or findOneBy! (uncaught exception) at C:\xampp\htdocs\eccube-3.0.1\vendor\doctrine\orm\lib\Doctrine\ORM\EntityRepository.php line 226 {"exception":"[object] (BadMethodCallException(code: 0): Undefined method 'getTemplatePath'. The method name must start with either findBy or findOneBy! at C:\\xampp\\htdocs\\eccube-3.0.1\\vendor\\doctrine\\orm\\lib\\Doctrine\\ORM\\EntityRepository.php:226)"} [] [2015-07-17 06:01:43] myapp.INFO: < 500 [] []
何かメソッドないって言われてる?
Grepかけます
まずは、この「getTemplatePath」が本当にないか調べてみます。
……ないな。
類似名称のメソッドを調べてみる
BlockController.phpを開いて類似名称のメソッドがないか調査です。
きっとTemplatePathとかで調べたらひっかかるんじゃないの?
本当にひっかかるとは思わなかった……。
えっと、getWriteTemplatePathですね。定義を見てみましょう。
\src\Eccube\Repository\BlockRepository.php
/** * 書き込みパスの取得 * User定義の場合: /html/user_data * そうでない場合: /app/template/{template_code} * * @param boolean $isUser * @return string */ public function getWriteTemplatePath($isUser = false) { return ($isUser) ? $this->app['config']['user_block_realdir'] : $this->app['config']['block_realdir']; }
あ、もうこれですね。
これ呼べばいいんじゃないですか。
そして、修正
というわけでgetTemplatePathをgetWriteTemplatePathに書き換えます。
public function delete(Application $app, $id) { $DeviceType = $app['eccube.repository.master.device_type'] ->find(DeviceType::DEVICE_TYPE_PC); $Block = $app['eccube.repository.block']->findOrCreate($id, $DeviceType); // ユーザーが作ったブロックのみ削除する if ($Block->getDeletableFlg() > 0) { $tplDir = $app['eccube.repository.page_layout'] ->getWriteTemplatePath($DeviceType); $tplDir .= $app['config']['block_dir']; $file = $tplDir . $Block->getFileName(); $fs = new Filesystem(); if ($fs->exists($file)) { $fs->remove($file); } $app['orm.em']->remove($Block); $app['orm.em']->flush(); } return $app->redirect($app->url('admin_content_block')); }
問題なくブロックが消えました。
……うん、でも、削除完了してもメッセージって出ないんですね。
これはまた今度調べてみましょう。