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 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?