> 管理機能 > 管理画面で例外が発生 |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
h_yamada |
投稿日時: 2016/9/30 10:18
対応状況: 開発中
|
新米 登録日: 2016/8/30 居住地: 投稿: 8 |
管理画面で例外が発生 管理画面の商品マスターでCrawlerを使っているのですが、
eccube.CRITICAL: InvalidArgumentException: The current node list is empty. (uncaught exception)がでて困っています。try〜catchで解決するかと思ったのですがうまく行きません。ご教授いただけると助かります。 コードは以下のとおりです。 event.yml eccube.event.route.admin_product.exception: - [onAdminException,NORMAL] eccube.event.route.admin_product.response: - [onAdminRenderBefore,NORMAL] eccube.event.route.cart.response: - [onCartRenderBefore,NORMAL] Admin/Product/index.twig: - [onRenderProductList, NORMAL] controller <?php namespace Plugin\StockControll; use Eccube\Application; use Eccube\Common\Constant; use Eccube\Entity\Category; use Eccube\Event\EventArgs; use Eccube\Event\TemplateEvent; use Plugin\CategoryContent\Entity\CategoryContent; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\DomCrawler\Crawler; class StockControllEvent { /** @var \Eccube\Application $app */ private $app; public function __construct($app) { $this->app = $app; } public function onAdminProduct2(EventArgs $event) { } // Crawlerを使った処理 public function onCartRenderBefore(FilterResponseEvent $event){ } public function onAdminException(FilterResponseEvent $event){ dump(000); } public function onAdminRenderBefore(FilterResponseEvent $event) { //引数eventから 内容を取得する $response = $event->getResponse(); // 在庫切れ情報を挿入 $addContent = '<span class="icon_stock">在庫なし</span>'; // 書き換えhtmlの初期化 $html = $response->getContent(); // 書き換え処理 // Crawlerクラスのhtmlメソッドを確認 // try catchで例外がないときにだけ、正常な動作 try{ $crawler = new Crawler($html); $filter = $crawler->filter('.item_detail > a'); $oldHtml = $filter->html(); $newHtml = $oldHtml . $addContent; $html = $crawler->html(); $html = str_replace($oldHtml, $newHtml, $html); $response->setContent($html); $event->setResponse($response); }catch(Exception $e){ $e->getMessage(); } } public function onRenderProductList(TemplateEvent $event){ // twigコードに在庫切れ情報を挿入 /*$snipet = '{% set displayed = false %} {% for ProductClass in Product.ProductClasses %} {% if not displayed and ProductClass.StockFind == false %} <span class="icon_stock">在庫なし</span> {% set displayed = true %} {% endif %} {% endfor %}'; // 検索する文字 $search = '<br>'; $replace = $snipet.$search; // ソース全体から<br>を探し、置き換える $source = str_replace($search, $replace, $event->getSource()); $event->setSource($source);*/ } } 例外を捕まえようとしたのですがうまく行きませんでした。 |
red |
投稿日時: 2016/9/30 11:50
対応状況: −−−
|
神 登録日: 2010/2/15 居住地: 東京都 投稿: 1569 |
Re: 管理画面で例外が発生 The current node list is emptyとありますし、
.item_detail > a が存在するのかを先に調べればいいんじゃないでしょうか
|
h_yamada |
投稿日時: 2016/9/30 14:12
対応状況: −−−
|
新米 登録日: 2016/8/30 居住地: 投稿: 8 |
Re: 管理画面で例外が発生 ご回答ありがとうございます。
商品マスターに入った時点では、.item_detail > aは存在してないです。 そのため、$crawler->filter('.item_detail > a')のstorageが空の配列で例外が発生しているという状態です。 storageが空かどうかで処理を分けたいのですが、$filter->storageがnullのためどうしたらいいかわからないです。 |
red |
投稿日時: 2016/9/30 15:20
対応状況: −−−
|
神 登録日: 2010/2/15 居住地: 東京都 投稿: 1569 |
Re: 管理画面で例外が発生 $crawler->filter('.item_detail > a')はそれが存在するページでしか使えないので、存在しない場合は呼ばれないようにするしかないと思います
try catchではなく、modeなどで判断すべきかと
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |