如何使用Symfony2 ClassLoader和Console创建独立命令行应用程序

时间:2013-11-18 05:07:16

标签: symfony command-line autoloader

我正在尝试使用Symfony2控制台和ClassLoader组件编写命令行应用程序。

这是我的代码层次结构和被调用脚本的屏幕截图 code hierarchy 这是CLI脚本:

#!/usr/bin/env php
<?php
    require_once(dirname(__FILE__) . '/code/ClassLoader/UniversalClassLoader.php');
    use Symfony\Component\ClassLoader\UniversalClassLoader;
    use Symfony\Component\Console\Application;
    use Symfony\Component\Console\Input\ArgvInput;

    use BlueHeadStudios\Command\Deployer;

$loader = new UniversalClassLoader();
$loader->register();

$input = new ArgvInput();
$debug = $input->hasParameterOption(array('--debug', ''));

$console    = new Application();
$console->add(new Deployer());
$console->run();

运行脚本时我得到了这个

dev@server:~/sites/pd/deployer$ php deployer.php
PHP Fatal error:  Class 'Symfony\Component\Console\Input\ArgvInput' not found in /home/dev/sites/pd/deployer/deployer.php on line 13

我知道它必须是一个简单的registerNamespace电话或类似的东西,但我已经尝试了多次注册,但无法让它发挥作用。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

我建议您使用composer生成autoload.php,以便将其包含在文件顶部:

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

require_once './vendor/autoload.php';

use Symfony\Component\ClassLoader\UniversalClassLoader;

$loader = new UniversalClassLoader();
$loader->registerNamespace('BlueHeadStudios', __DIR__.'/src/');
$loader->register();

// write your code below

答案 1 :(得分:1)

您应该使用app/console运行该应用程序,然后选中example here