2016-10-04 4 views
0

私は単純なREST APIを作ることができるように最小限のSilex 3、Doctrine2スタックを作成することに決めました。私はどのように教義のコンソールを処理するか分からない。カスタムCLIコマンドを使ってdoctrineコンソールを実行

私は事を単純にしたいのでproject rootbinというフォルダを作成しました。私はさまざまなPHPファイルを実行するはずの単純なファイルconsole.phpを作成しました。

ファイル:bin\console.php

<?php 

// When I run "php bin/console.php doctrine --version" 
// The "doctrine" is name of the library that I want to use 
// So that I can also do something like "php bin/console.php myLibrary --specialCommand" 
$type = $argv[1]; 

// I want to remove the name of the library from the cli command though 
unset($argv[1]); 
// Update array indexes 
$argv = array_values($argv); 

// Choose file 
if ($type == "doctrine") { 
    // Run doctrine 
    require_once __DIR__ . "/console/doctrine.php"; 
} 

しかし、私は、次の取得エラー:

[Symfony\Component\Console\Exception\CommandNotFoundException] 
    Command "doctrine" is not defined. 

答えて

0

私は、これは物事を行うにはどのように本当に悪い方法が実際にあることを知っているが、誰もがに答えを知りたい場合将来的にを編集する場合は、$argcも更新する必要があります。

このコードは期待通りに動作します:Silex-SkeletonDoctrine ORM Service Providerと私の設定だ

<?php 

// When I run "php bin/console.php doctrine --version" 
// The "doctrine" is name of the library that I want to use 
// So that I can also do something like "php bin/console.php myLibrary --specialCommand" 
$type = $argv[1]; 

// I want to remove the name of the library from the cli command though 
unset($argv[1]); 
// Update array indexes 
$argv = array_values($argv); 
$argc -= 1; 

// Choose file 
if ($type == "doctrine") { 
    // Run doctrine 
    require_once __DIR__ . "/console/doctrine.php"; 
} 
1

を。

src/console.php

このファイルでは、Doctrine CLIコマンドを追加する必要があります。

<?php 

use Symfony\Component\Console\Application; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Output\OutputInterface; 
use Symfony\Component\Console\Input\InputArgument; 
use Symfony\Component\Console\Input\InputOption; 
use Symfony\Component\Filesystem\Filesystem; 
use Symfony\Component\Finder\Finder; 
use Symfony\Component\Console\Helper\HelperSet; 
use Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper; 
use Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper; 
use Doctrine\ORM\Tools\Console\ConsoleRunner; 

$console = new Application('My Silex Application', 'n/a'); 
$console->getDefinition()->addOption(new InputOption('--env', '-e', InputOption::VALUE_REQUIRED, 'The Environment name.', 'dev')); 
$console->setDispatcher($app['dispatcher']); 

$console 
    ->register('cache:clear') 
    ->setDescription('Clears the cache') 
    ->setCode(function (InputInterface $input, OutputInterface $output) use ($app) { 

     $cacheDir = $app['cache.path']; 
     $finder = Finder::create()->in($cacheDir)->notName('.gitignore'); 

     $filesystem = new Filesystem(); 
     $filesystem->remove($finder); 

     $output->writeln(sprintf("%s <info>success</info>", 'cache:clear')); 

    }) 
; 

/* 
* Doctrine CLI 
*/ 

$helperSet = new HelperSet(array(
    'db' => new ConnectionHelper($app['orm.em']->getConnection()), 
    'em' => new EntityManagerHelper($app['orm.em']) 
)); 

$console->setHelperSet($helperSet); 
Doctrine\ORM\Tools\Console\ConsoleRunner::addCommands($console); 

return $console; 

bin/console

#!/usr/bin/env php 
<?php 

require_once __DIR__.'/../vendor/autoload.php'; 

set_time_limit(0); 

use Symfony\Component\Console\Input\ArgvInput; 

$input = new ArgvInput(); 
$env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev'); 

$app = require __DIR__.'/../src/app.php'; 
require __DIR__.'/../config/'.$env.'.php'; 
$console = require __DIR__.'/../src/console.php'; 
$console->run(); 

src/app.php

<?php 

use Silex\Application; 
use Silex\Provider\AssetServiceProvider; 
use Silex\Provider\TwigServiceProvider; 
use Silex\Provider\ServiceControllerServiceProvider; 
use Silex\Provider\HttpFragmentServiceProvider; 
use Dflydev\Provider\DoctrineOrm\DoctrineOrmServiceProvider; 
use Silex\Provider\DoctrineServiceProvider; 

$app = new Application(); 
$app->register(new ServiceControllerServiceProvider()); 
$app->register(new AssetServiceProvider()); 
$app->register(new TwigServiceProvider()); 
$app->register(new HttpFragmentServiceProvider()); 
$app->register(new DoctrineServiceProvider()); 
$app->register(new DoctrineOrmServiceProvider); 

$app['twig'] = $app->extend('twig', function ($twig, $app) { 
    // add custom globals, filters, tags, ... 

    return $twig; 
}); 

// Doctrine DBAL 
$app['db.options'] = array(
    'driver' => 'pdo_mysql', 
    'host' => 'localhost', 
    'dbname' => 'xxxx', 
    'user' => 'xxxx', 
    'password' => 'xxxx', 
    'charset'  => 'utf8', 
    'driverOptions' => array(1002 => 'SET NAMES utf8',), 
); 

// Doctrine ORM 
$app["orm.em.options"] = array(
    "mappings" => array(
     array(
      'type' => 'annotation', 
      "namespace" => "XYZ\Entity", 
      'path' => __DIR__ .'/XYZ/Entity', 
      "alias" => "AppBundle", 
      'use_simple_annotation_reader' => false 
     ), 
    ), 
); 

return $app; 

composer.json

あなたは、いくつかの依存関係を追加する必要があります。

"symfony/console": "~2.8|3.0.*", 
"doctrine/dbal": "~2.5.4", 
"dflydev/doctrine-orm-service-provider": "^2.0", 

そしてfinalyコンソールを実行します。

php bin/console 
php bin/console orm:generate-entities src/ 
関連する問題