In CakePHP, how do I call an AppController method from a helper?

爱⌒轻易说出口 提交于 2019-12-11 19:56:08

问题


Follow up question to: In CakePHP, where would I put a method that performs a check on the Session User?


Background: In my previous question, I was informed that the correct place to place a method such as levelCheck() which performs a semi-complicated evaluation of a user's level, and is needed in practically all my controllers, is the AppController.

Now, this method is also incredibly useful for the way I design menu layouts and other view devices. For that reason, I would like to create a helper that can make use of that method.

Problem: I recognize that it's generally frowned upon to call a controller method from the view... however there is no viable way for me to pass data to replicate the function of this method, nor do I want to replicate the method in two places (violating DRY methodology).

Question: How then do I call this method from a helper, or is there a better way to provide use of this method in the view/elements?


回答1:


Put the method in AppController, also - set a variable that will save the result.

In the beforeRender callback, set the result as a viewVar.

some code:

// AppController

class AppController extends Controller 
{

  $levelCheckResult = null;

  function levelCheck(){
    $this->levelCheckResult = true/false;
  }


  function beforeRender(){
    $this->set('levelCheckResult', $this->levelCheckResult);
  }
}

that's it, now you can access it in the view.

edit


create a public function in the app_controller, and in the beforeRender(), send the app_controller itself, to the view.

class AppController extends Controller 
{

  function levelCheck(){
    ....
  }


  function beforeRender(){
    $this->set('TheApp', $this);
  }
}
// in the view
$TheApp::levelCheck();

However, please consider again the design. this kind of manipulation is strongly suggest that you should change some stuff there.

In short - the view is still backend execution of the program and not the client side, so in definition - it should and can be controlled, from the controller...




回答2:


The solution I ended up using was to move the method to a component (CurrentUserComponent).

From there, it was as simple as calling the component in the head of my helper...

App::uses('CurrentUserComponent', 'Controller/Component');

And referencing the component's static method:

CurrentUserComponent::levelCheck(x,y,z);

I don't think this is entirely within the intention of the MVC pattern, but it doesn't pervert it horribly, and allows access to the method from anywhere in the application.



来源:https://stackoverflow.com/questions/21505059/in-cakephp-how-do-i-call-an-appcontroller-method-from-a-helper

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!