2013-04-17 5 views
10

habe ich eine neue Klasse in src/CollaboratorsBundle/Befehl, es GenerateFormRemindersCommand.php Namen und den folgenden Code in es:Symfony2 benutzerdefinierte Konsolenbefehl wird als „nicht definiert“ bei der Ausführung

<?php 
namespace Myproject\CollaboratorsBundle\Command; 

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

class GenerateFormRemindersCommand extends ContainerAwareCommand{ 

    protected function configure() { 
     $this->setName("generate:formReminders") 
      ->setDescription('Send reminders by email to all collaborators with unanswered forms'); 
    } 

    protected function execute(InputInterface $input, OutputInterface $output) { 
     //some code 
    } 
} 

Bei der Ausführung, i erhalten folgende Meldung:

$ php app/console generate:formReminders 
[InvalidArgumentException] 
Command "generate:formReminders" is not defined. 

ich in meiner AppKernel.php Datei überprüft haben, dass mein Bündel wurde in sie eingetragen und es war.

Ich habe versucht, Eltern hinzuzufügen: configure(); zur configure-Methode, aber ohne Ergebnisse.

Ich habe ein paar andere benutzerdefinierte Befehle erstellt, die korrekt funktionieren. Ich verstehe in diesem Fall nicht, was ich falsch mache. Machst du ?

Vielen Dank im Voraus

Antwort

48

ich das gleiche Problem hatte, weil ich Datei ohne „Command“ Suffix genannt. Sie müssen Ihre Datei als 'GenerateFormRemindersCommand.php' benennen.

+4

Sie haben keine Ahnung, wie richtig diese Antwort ist. Meine Güte. Gerade endete eine halbe Stunde Frustration für mich. –

+0

@Jarrod, ja, verbrachte auch ungefähr eine Stunde. Und ich verstehe immer noch nicht, warum dieses Suffix 'Command' erforderlich ist, obwohl es einen speziellen Namespace für alle Befehle gibt. –

+0

Hier ist eine Referenz von der Symfony-Website, die genau das sagt: http://symfony.com/doc/current/cookbook/console/console_command.html#automatisch-Registrierungs-Befehle – syss

1

Sie haben Ihre Datei nicht am richtigen Ort gespeichert.

Wenn Sie über Ihren Code und den verwendeten Namespace schauen, haben Sie die Datei bereits in src/CollaboratorsBundle/Command abgelegt. Während es in src/Myproject/CollaboratorsBundle/Command platziert werden muss.

2

Ich hatte den gleichen Fehler. Das Problem, das ich hatte, war, dass ich den Konstruktor implementierte, um ein Repository-Feld anstelle der initialize() Methode zu initialisieren.

Verwandte Themen