2016-07-22 1 views
1

ip-api.comからいくつかのデータを取得してセッションに入れて、特定の顧客データを後でそのアプリケーションのプロセスで使用できるようにする必要があるというケースがあります。Concrete5コントローラロジック

問題は、ロジックをどこに置くかわかりません。Concrete5です。 application/src/IpApiにクラスを作成していますが、クラス自体は問題ではありません。主な問題は、すべての単一のページビューで確実に実行できるかどうかです。 2番目のオプションは、ブロックを作成してヘッダーに追加することですが、テンプレートページがレンダリングされる前に、フロントページがアクティブになる前でも解析する必要があります。

どこに置くべきですか、どのように読み込むべきですか?私の現在のテーマは、elementalテーマの延長です。アドバイス

答えて

0

ため

おかげで私は私がPageType最初に作成する必要があることが分かりました。特定のタイプのコントローラはそこからapplication/controllers/page_types/<mytype.php>

で作成することができることをした後on_start方法はあなたの友達であるか、あなたはあなたがパッケージを作成し、パッケージコントローラのon_start機能を使用することができます

1

勿論必要どんな機能。 on_before_renderイベント内で操作を行うことをお勧めします。これは、ajaxリクエストやその他のことについてこれを実行していないことを保証するためです。それは次のようになります:

<?php 
namespace Concrete\Package\SomePackage; 

class Controller extends \Concrete\Core\Package\Package 
{ 

    public function on_start() 
    { 
     $app = \Core::make('app'); 
     $app->make('director')->addEventListener(
      'on_before_render', 
      function() use ($app) { 
       $session = $app->make('session'); 
       $flashBag = $session->getFlashBag(); 

       if (!$flashBag->has('my-custom-data')) { 
        $dataGetter = $app->make('YourCustomDataGetterClass'); 
        $flashBag->set('my-custom-data', $dataGetter->getData()); 
       } 
      } 
     ); 
    } 

} 
関連する問題