My new client is using yii framework, he’s very impressed … I’m still a yiinoob looking for answers though
I’m trying to create a CConsoleCommand to perform a db bootstrap, useful prior to DB Migrations if someone wants a clean start because their tests have crapped it up, new developers etc.
I’ve noticed that CConsoleCommand::init is not called as the api says. My child class overrides, but unless I invoke it myself in run($args) it is not called.
CConsoleCommandRunner calls init() right before it calls run() on the instantiated CConsoleCommand. I can’t imagine a reason why this shouldn’t work. Can you post an example of the code that’s not working?
I have a simple BootstrapdbCommand extends CConsoleCommand in the command path.
./yiic shell
and help shows it in the list.
I put an echo in CConsoleCommandRunner announcing the invocation of the init method. There I discovered it’s calling ShellCommand::init() rather than my BootstrapdbCommand::init()
edit: in fact in the trackstar app I’m getting the same thing. I added echoes to all the various inits as in
echo get_class($this).": message text whatever\n";
ShellCommand lets the ancestor CConsoleCommand parent init() handle it.
kevin@ubuntuhagelbg:/var/www/trackstar/protected$ ./yiic shell ../index.php
CConsoleCommandRunner: CALLING command's init method, command is a ShellCommand
ShellCommand: init method invoked
Yii Interactive Tool v1.1 (based on Yii v1.1.<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' />
Please type 'help' for help. Type 'exit' to quit.
>> rbac
RbacCommand: run() called
>>
I see. You’re referring to the case of executing your command from within the yiic shell? I must admit, that I didn’t use that shell for quite some time… You’re aware of the fact that you don’t need to use that shell?
For example, my commands are stored under protected/commands (default for CConsoleApplication::commandPath) and I use them this way:
D:\wamp\www\yiiSignalsDemo\trunk>protected\yiic.bat help
Yii command runner (based on Yii v1.1.7)
Usage: D:\wamp\www\yiiSignalsDemo\trunk\protected\yiic.php <command-name> [parameters...]
The following commands are available:
- message
- migrate
- shell
- signal <-- custom one
- webapp
To see individual command help, use the following:
D:\wamp\www\yiiSignalsDemo\trunk\protected\yiic.php help <command-name>
D:\wamp\www\yiiSignalsDemo\trunk>protected\yiic.bat help signal
Usage: D:\wamp\www\yiiSignalsDemo\trunk\protected\yiic.php signal <action>
Actions:
list
connect --signalId=value --cmd=value
D:\wamp\www\yiiSignalsDemo\trunk>protected\yiic.bat signal list
Post\onPostPublished
No need to enter the yiic shell first. Maybe this can help.
For the invocation of commands through yiic shell, I can confirm, that CustomCommand::init() won’t be called.
I’ve moved into that use now, leaving the shell. I was overriding teh constructor without calling the ancestor constructor with the args, and I was overriding CConsoleCommand::run($args) as described in the agile yii book. I had no good reason to do that in my bootstrapdb method. As soon as I removed my override the init() was called by the console runner