dsce23640 2010-06-08 22:01
浏览 37
已采纳

使用Kohana / MVC Framework访问模型内​​的控制器方法

I need to able to access controller methods from a model using the Kohana V2.3 framework. At the moment I'm passing the controller object (by ref.) to the model on creation which works perfectly fine but I can't help think there is a more "cleaner" way - does anybody have any suggestions? Would Kohana V3 resolve this with its HMVC pattern?

This may help: http://www.ifc0nfig.com/accessing-the-calling-controller-in-a-model-within-kohana/

  • 写回答

2条回答 默认 最新

  • duancu4731 2010-06-20 18:40
    关注

    You're instantiating the Facebook connector in the controller, and you don't want to do that twice so it makes sense that you'd want the model to have access to it. So far so good. There are two ways to do this.

    1) Create a library which has a singleton instance that wraps the Facebook instance. That would look like this:

    // libraries/FacebookApi.php
    class FacebookApi {
      // this stores the singleton FacebookApi
      protected static $instance = null;
    
      // this is the singleton's Facebook instance
      protected $facebook = null;
    
      // Return the single FacebookApi wrapper
      public static function instance() {
        if (!isset(FacebookApi::$instance)) {
          self::$instance = new FacebookApi();
        }
        return $instance;
      }
    
      // Construct a single FacebookApi containing a single Facebook
      protected function __construct() {
        $this->facebook = new Facebook(  
          Kohana::config('mysubs.facebook_apikey'),  
          Kohana::config('mysubs.facebook_secret')  
        );  
      }
    }
    

    both your controller and your model would access it like this:

    $facebook = FacebookApi::instance()->facebook;
    $facebook->require_login(); // etc
    

    Example code from Kohana 2.x: http://dev.kohanaframework.org/projects/kohana2/repository/entry/trunk/system/libraries/Database.php

    2) Since you're probably not going to do anything with an actual library other than just access the Facebook class, just create a simple helper that wraps a singleton:

    // helpers/facebook_api.php
    class facebook_api {
      static $facebook = null;
    
      static function instance() {
        if (!self::$facebook) {
          self::$facebook = new Facebook(  
            Kohana::config('mysubs.facebook_apikey'),  
            Kohana::config('mysubs.facebook_secret')  
          );
        }
        return self::$facebook;
      }
    }
    

    both your controller and your model would access it like this:

    $facebook = facebook_api::instance();
    $facebook->require_login(); // etc
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 ats2837 spi2从机的代码
  • ¥200 wsl2 vllm qwen1.5部署问题
  • ¥100 有偿求数字经济对经贸的影响机制的一个数学模型,弄不出来已经快要碎掉了
  • ¥15 这个公式写进SIMULINK中的function模块的代码中应该是什么样的
  • ¥15 javaweb登陆的网页为什么不能正确连接查询数据库
  • ¥15 数学建模数学建模需要
  • ¥15 已知许多点位,想通过高斯分布来随机选择固定数量的点位怎么改
  • ¥20 nao机器人语音识别问题
  • ¥15 怎么生成确定数目的泊松点过程
  • ¥15 layui数据表格多次重载的数据覆盖问题