Доступ к методам оболочки в контроллере? Торт PHP 1.3 - PullRequest
3 голосов
/ 02 июня 2010

Я написал метод оболочки в CakePHP 1.3, который имеет возвращаемое значение.

Я хотел бы иметь возможность получить доступ к этому методу из контроллера, чтобы я мог передать его возвращаемое значение в View.

Я не уверен, как правильно получить доступ к этим методам из контроллера.Я сделал это неправильно?

Я мог бы легко продублировать код, но я бы хотел «сохранить его СУХИМ», и реальная функциональность, я считаю, не относится к этому конкретному контроллеру - мне просто нужно, чтобы это возвращаемое значениеконкретный вид.

РЕДАКТИРОВАТЬ:

Я понимаю, что задаю здесь не тот вопрос, поскольку сама оболочка не обязательно должна возвращать значение.Я изменил код так, чтобы Shell была только , используя возвращаемое значение, которое я хочу, и теперь я задаюсь вопросом - каково подходящее место для дополнительных классов / кода, к которому нужно получить доступ из Shell а Контроллер?

Похоже, код компонента, но я не уверен, как получить доступ к компонентам из командной консоли.Это не плагин, насколько я понимаю.Куда это идет?

Ответы [ 4 ]

5 голосов
/ 04 июня 2010

В одном из проектов мы импортировали задачи оболочки, например:

<br> App::import('Core', 'Shell'); <br> App::Import('Vendor','shells/tasks/sometask'); <br> <br> $returndata = TasknameTask::execute($somevalue);<br> <br>


2 голосов
/ 03 июня 2010

Вы можете создать для этого компонент . Например,

/* in app/controllers/components */
class ShellComponent extends Object
{
    function do_shell()
    {
       return shell_exec('some command');
    }
}

Затем используйте его в любом контроллере, как вы хотите

/* in some controller*/
var $components = array('Shell','maybe some other components',....);

function testShell()
{
    $result = $this->Shell->do_shell();
    ....
}
0 голосов
/ 02 июня 2012

Принятый ответ не работает для Cake 2.0

Для торта 2.0

if (!class_exists('Shell')) {
    require CONSOLE_LIBS . 'shell.php';
}

App::import('Shell', 'DoSomething');
DoSomethingShell::main();

Имейте в виду, что некоторые методы Shell не работают в этом режиме, например $ this-> out, поэтому требуется больше взлома.

0 голосов
/ 03 июня 2010

Оболочки не должны напрямую возвращать значение явно, они должны как-то сообщать о нем, например передав его на стандартный вывод, войдя в файл или отправив электронное письмо, например. Мне нравится думать о оболочках как о контроллерах для клиентов.

Не зная вашего приложения, я бы посоветовал посмотреть, сможете ли вы преобразовать логику в вашей текущей оболочке в класс модели или что-то в этом роде, заставить метод модели вернуть значение, а затем использовать эту модель в вашей оболочке. Таким образом, вы также можете использовать эту модель в вашем контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...