Thanks! This is amazing advice. I am such a beginner and this was
fantastic. The array idea is so simple and brilliant, way easier. I
will try to look into doing what you suggest. Thanks again.
On Oct 14, 9:01 pm, ORCC <[EMAIL PROTECTED]> wrote:
> I think first that all you have to separate the "parsing" of the text
> and the execution of the command itself via components, namely:
>
> 1) Create a "CommandParser" component that has function to "parse" a
> command.
> 2) Create a "CommandExecutive" component that has a method for
> implement each of the commands.
>
> I suggest you to handle the user input in a unique action in the
> controlle. For example, create a send action where all the user text
> is sent:
>
> class ChatController extends AppController {
> var $components =
> Array('CommandParser','CommandExecutive');
>
> /*handles all text send by user*/
> function send($text) {
> /*analize wherter the input is a command or is plain
> text*/
> if (CommandParser::isCommand($text)) {
> //is a command redirect for command execution
> //use the parser component to get the command
> and the parameter of the command
> $command = CommandParser::getCommand($text);
> $parameter = CommandParser::getParameter($te
> $this->redirect("/chat/command/$command/
> $parameter");
>
> }
> else {
> //is normal text, show
> $this->redirect("/chat/add/$text")
> }
> }
>
> //here is the rest of actions
> function add ($text) {
> //perform logic of add text
> }
>
> function command ($command, $parameter) {
> //perform logic of command
> }
>
> }
>
> For executing the command you can avoid the big switching statement by
> using an array of callbacks indexed with the command names. All
> callbacks are methods defined in the ActionExecutive component itself.
> For example:
>
> //this function may be in the controller
> function proccessCommand($text,$parameter) {
> $command_list = Array (
> 'help' => "displayHelp",
> 'quit' => "quitUser",
> /* ... */
> );
>
> /*verify if it is a valid command*/
> if (empty($command_list[$text])) {
> return INVALID_COMMAND; /*this maybe a constant*/
> }
>
> $callback = $command_list[$text];
> /*execute the command that is a method in a command executive
> component*/
> $result = CommandExecutive::$callback($parameter);
> return $result;
>
> }
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---