2016-04-25 6 views
0

私が持っているものは、いくつかのリポジトリとともにいくつかのエンティティを含むsymfonyアプリケーションです。 2番目の非symfonyアプリケーションは、そこに書かれたロジックとやりとりするために、最初のものとインターフェースする必要があります(エンティティとその適切なリポジトリを使用するだけです)。 最初のアプリケーションには独自の自動ロードレジスタなどがある可能性があることに注意してください。Symfonyアプリケーションの外部からSymfonyモデルレイヤにアクセスして使用する

私はappディレクトリにある外部アプリケーション用のAPIクラスを考えました。これを使用するには、アプリケーションにスクリプトが必要です。外部アプリケーションが必要とする必要があること

app/authInterface.php:ここでアイデアです

$loader = require __DIR__.'/autoload.php'; 
require_once (__DIR__.'/APIAuth.php'); 

return new APIAuth(); 

と私が書いた作業APIAuthの例(コードは一種の厄介です:これはちょうど試みですが、あなたができる覚えています)アイデアを得る:

class APIAuth 
{ 
    public function __construct() 
    { 
     //dev_local is a personal configuration I'm using. 
     $kernel = new AppKernel('dev_local', false); 
     $kernel->loadClassCache(); 
     $kernel->boot(); 

     $doctrine = $kernel->getContainer()->get('doctrine'); 
     $em = $doctrine->getManager(); 
     $users = $em->getRepository('BelkaTestBundle:User')->findUsersStartingWith('thisisatry'); 
    } 

シェルのすべてで、それを呼び出すことによって動作し、私はそれに満足している:

php app/authInterface.php 

が、私はの面で可能な最善の方法でやっている場合、私は思ったんだけど:私は、私は本当に私のコードを実行するために必要なだけのリソースをロードしています

  • リソース?カーネルが本当に必要ですか?そうすれば、DB接続を含めてすべてが適切にロードされますが、それ以外の方法があれば確実ではありません。
  • symfony論理私はsymfonyと適切にやりとりしていますか?より良い方法がありますか?
+0

なぜ外部アプリケーションを認証するためのHTTP APIを作成しないのですか? – Hidde

+0

明確なインターフェース(例えば、RESTやXMLなど)で、Symfonyを使って適切なバックエンドを構築することをお勧めします。 – LBA

+0

'Auth'は単なる例です。私は実際にSymfonyにアクセスする必要があります。本当の話題に集中できますか? :-) – Bertuz

答えて

0

Symfonyでは、コマンドラインからその機能を使用することができます。あなたはcronジョブや他のアプリケーションを使用して、あなたのsymfonyアプリケーションを呼び出したい場合は、次の2つの一般的なオプションがあります。

  • をHTTPエンドポイントを生成するあなたのsymfonyアプリケーションで
  • あなたのsymfonyアプリケーション
  • でコードを実行コマンドを生成

両方のオプションについて以下で説明します。

HTTPエンドポイント(RESTのAPI)

ルートにコントローラ/アクションへのHTTPリクエストをお使いのルーティング設定でルートを作成します。

# app/config/routing.yml 
test_api: 
    path:  /test/api/v1/{api_key} 
    defaults: { _controller: AppBundle:Api:test } 

これは、ApiController::testActionメソッドを呼び出します。

次に、あなたがexcecuteしたいあなたのコードでtestActionを実装:

use Symfony\Component\HttpFoundation\Response; 

public function testAction() { 
    return new Response('Successful!'); 
} 

コマンド

アプリケーションで何かを行い、コマンドラインコマンドを作成します。これは、(Web)アプリケーションで定義したSymfonyサービスを使用できるコードを実行するために使用できます。

それは次のようになります。ドキュメントを探しhere

// src/AppBundle/Command/TestCommand.php 
namespace AppBundle\Command; 

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; 
use Symfony\Component\Console\Input\InputArgument; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Input\InputOption; 
use Symfony\Component\Console\Output\OutputInterface; 

class GreetCommand extends ContainerAwareCommand 
{ 
    protected function configure() 
    { 
     $this 
      ->setName('myapp:section:thecommand') 
      ->setDescription('Test command') 
      ->addArgument(
       'optionname', 
       InputArgument::OPTIONAL, 
       'Test option' 
      ) 
     ; 
    } 

    protected function execute(InputInterface $input, OutputInterface $output) 
    { 
     $option = $input->getArgument('optionname'); 
     if ($option) { 
      $text = 'Test '.$option; 
     } else { 
      $text = 'Test!'; 
     } 

     $output->writeln($text); 
    } 
} 

bin/console myapp:section:thecommand --optionname optionvalue 

のようなものを使用してコマンドを呼び出します(事前3.0 symfonyのインストールに使用app/consoleを。)あなたが考える方オプション


使用がベストです。

1つのアドバイスです。アプリケーションがSymfonyフレームワークを完全に使用している場合、Symfonyフレームワークの一部を使用しようとしないでください。あなたは道に沿ってトラブルに陥り、あなたは自分の人生を大変にしているでしょう。

Symfonyを使用してアプリケーションを構築しているときに、使い慣れた美しいツールを使用してください。

関連する問題