Denetleyicisi Erişim kabuk yöntemleri?

4 Cevap php

Ben bir dönüş değeri vardır CakePHP 1.3 bir kabuk yöntemi yazdı.

Ben Görünümüne dönüş değerini geçebilir, böylece ben, bir denetleyici içinde bu yöntemi erişebilir olmak istiyorum.

Ben denetleyicisi içinde uygun bu yöntemleri erişmek için nasıl emin değilim. Ben yanlış yaptım?

Ben kolayca kod çoğaltmak olabilir, ama ben "KURU tutun" istiyorum, ve gerçek işlevi, ben inanıyorum, bu özel denetleyicisi ile ait değil - Ben sadece bu özel görünümde dönüş değer gerekir.

EDIT:

Ben Shell kendisi mutlaka bir değer dönmemesi beri ben tür, burada yanlış soru soruyorum biliyoruz. Shell sadece using dönüş değeri istiyorum böylece ben kodunu değiştirdim ve şimdi merak ediyorum - bir Shell {[erişilen gereken ekstra sınıfları / kodu için uygun yer nedir (1)]} Controller?

Bu Bileşen kodu gibi görünüyor, ama ben Shell Bileşenleri erişmek için nasıl emin değilim. Ben onları anlamak gibi, bir eklenti değil. Nereye gidiyor bu?

4 Cevap


: Projelerinden biri biz kabuk görevler, eski ithal


App::import('Core', 'Shell');
App::Import('Vendor','shells/tasks/sometask');

$returndata = TasknameTask::execute($somevalue);


Sen create a component that.E.g yapmak yapabilirsiniz

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

Sonra aşağıdaki gibi istediğiniz herhangi bir kontrol kullanmak

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

function testShell()
{
    $result = $this->Shell->do_shell();
    ....
}

Kabuklar doğrudan örneğin, onlar bir şekilde rapor etmek gerektiğini, açıkça bir değer döndürür olmamalı , bunun stdout yankılanan bir dosyaya kaydedilmesini ya da örneğin bir e-posta göndererek. Ben cli için kontrolörler olarak kabukları düşünmek istiyorum.

Başvurunuzu bilmeden, benim önerim bir model sınıf veya bunun gibi bir şey içine geçerli kabuğunda mantığı refactor eğer, görmek için model yöntemi değerini dönün, sonra kabuk bu modeli kullanmak olacaktır. Bu şekilde, aynı zamanda denetleyicisi bu modeli kullanabilirsiniz.

Kabul cevabı Cake 2.0 için iş gibi görünüyor değil

Cake 2.0

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

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

Bazı Shell yöntem, $ this-> dışarı, yani daha hack gerekli olduğu gibi, bu modda çalışmaz unutmayın.