2017-05-17 7 views
0

CakePHP 3.4。*用のプラグインを作成しました。CakePHP 3のAppControllerからプラグインのコントローラーを呼び出す

このプラグインはチェックしますデータベース構成が設定されているかどうかを確認します。そうでない場合は、GUIインターフェースを使用してユーザーをワードプレスのように設定します。

プラグインが完璧に働いているが、それは、プラグイン

installerは何を今すぐ plugins/Installer/src/Controller/ディレクトリ

InstallControllerクラスを呼び出しているプラ​​グインの名前です

http://example.com/installer/install 

のURLを訪問して手動でロードする必要があります私はそれを自動的にチェックし、データベース接続が確立できなかった場合、ユーザをインストールインターフェイスにリダイレクトしたいと思う。

は、そのために私は今、プラグインのコントローラ

public function installationCheck() { 
    $db = ConnectionManager::get('default'); 

    if(!$db->connect()) { 
     if(Configure::read('Database.installed') == true) { 
      $this->Flash->error(__("Database connection couldn't be established. Please, re-configure it to start the application")); 
      return $this->redirect(['action' => 'index']); 
     } else { 
      $this->Flash->error(__("Please configure your database settings for working of your application")); 
      return $this->redirect(['action' => 'index']); 
     } 
    } 
    return true; 
} 

質問のInstallController内の機能を書かれています。

/app/src/Controller/AppController.phpメインアプリケーションのファイルからこのメソッドを呼び出す最も簡単な方法は何ですか?

答えて

2

簡単な答えですが、あなたはしません!

共有コントローラロジックは、AppController自体、ComponentまたはTraitのいずれかに属します。 AppControllerは他のコントローラで定義されたメソッドに決してアクセスするべきではありません。

何をしているのかは、AppControllerまたは関連するコントローラ経由でロードできるコンポーネントでこれを行うことをお勧めします。

だからあなたのコンポーネントは次のようになります - あなたは、関連するコントローラにロードし

<?php 
namespace Installer\Controller\Component; 

use Cake\Controller\Component; 

class InstallComponent extends Component 
{ 
    public function installationCheck() 
    { 
     // Method's logic 
    } 
} 

: - 次に、あなたのようなコントローラーから、コンポーネントのメソッドを使用することができます

public function initialize() 
{ 
    parent::initialize(); 
    $this->loadComponent('Installer.Install'); 
} 

を: -

$this->Install->installationCheck(); 
+1

ありがとう、私のプラグインで実装されています。 –

0

すべきではありません!

別のコントローラにアクセスする必要がある場合は、その機能をコントローラ間で共有されるロジックのパッケージであるComponentに移動することをお勧めします。

関連する問題