как использовать метод контроллера приложения в другом контроллере cakephp 1.3 - PullRequest
0 голосов
/ 27 сентября 2018

Это торт php 1.3

У меня есть метод в appcontroller, который называется setLog ().Я пытаюсь использовать этот метод как общий для всех контроллеров.но при вызове этого в другом контроллере (контроллер контроллера) он говорит:

вызов неопределенного метода CommitteesController :: setLog ()

Мне нужно знать, как вызвать эту функциюправильно.

AppController

App::import('Controller', 'ActionLogs');
  class AppController extends Controller {

 public function setLog($action,$remark,$status){

    $logs = new ActionLogsController;
    $logs->constructClasses();
    $data = ['action'=>$action,'user'=>$this->Auth->user('id'),'remark'=>$remark,'status'=>$status];
    $logs->add($data);
}

}

Контроллер комитетов

function add() {
    if (!empty($this->data)) {
        $this->Committee->create();
        if ($this->Committee->save($this->data)) {
            //create a log for success
            $this->setLog('add new committee',json_encode($this->data),1);

            $this->Session->setFlash(__('The committee has been saved', true));
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The committee could not be saved. Please, try again.', true));
            //create a log for failed
            $this->setLog('add new committee',json_encode($this->data),0);
        }
    }
    $committeeTypes = $this->Committee->CommitteeType->find('list');

    $cond = array('group_id' => 2,'is_active' => '1');
    $cond2 = array('group_id' => 4,'is_active' => '1');

    $secretaryUserids = $this->Committee->SecretaryUserid->find('list', array('conditions' => $cond));
    $assistantSecretaryUserids = $this->Committee->AssistantSecretaryUserid->find('list', array('conditions' => $cond2));
    $this->set(compact('committeeTypes', 'secretaryUserids', 'assistantSecretaryUserids'));
}

1 Ответ

0 голосов
/ 27 сентября 2018

Вы можете выбрать один из следующих двух:

Iheritance: создайте BaseController, в который вы можете поместить все методы, общие для контроллеров:

class BaseController extends Controller
{
      public function setLog() 
      {
           // Code here
      }
}

class YourController extends BaseController 
{
     public function yourControllerFunction()
     {
         $this->setLog();
     } 
}

setLog() должно бытьобщедоступный или защищенный, не приватный, или он будет работать только внутри BaseController.

Возможно, ваш AppController - это то, что я называю BaseController выше, поэтому вам нужно просто

class YourController extends AppController

и вы сможете использовать функцию setLog().

Еще один способ обмена функциями - использование черт:

trait LoggerTrait
{
    public function setLog()
    {
        // Code here
    }
}

class YourController extends Controller
{
    use LoggerTrait;

    public function yourControllerFunction()
    {
        $this->setLog();
    } 
}
...