الإطار زند وجهة نظر الدعوة مساعد من Zend_View_Helper

StackOverflow https://stackoverflow.com/questions/1800342

  •  05-07-2019
  •  | 
  •  

سؤال

لدي مساعد يسمى Zend_View_Helper_FormVars المستخدمة من قبل واحدة من وحدات.وأنا أيضا مشترك مساعد في application/common/helpers/GeneralFunctions.php

أحاول استدعاء دالة من Zend_View_Helper_FormVars هذا في GeneralFunctions.php.

هنا هو نسخة قصيرة من Zend_View_Helper_FormVars:

class Zend_View_Helper_FormVars
{
    public $reqFieldVisual='<span class="req">*</span>';
    public $roles=array('admin'=>'admin', 'user'=>'user');
    public $paymentMethods=array('1'=>'Check', '2'=>'Credit Card',
                '3'=>'Cash', '4'=>'Other');


    public function formVars(){
        $this->baseUrl=Zend_Controller_Front::getInstance()->getBaseUrl();
        return $this;
    }

    public function mkCategoryCodeSelectGroup($codeTypeArr=array(),
        $codesArr=array()) {
        $html='';
        $html.=Zend_View_Helper_GeneralFunctions::generalFunctions()->progressMeter();
        return $html;
    }
}

هنا هو رمز في GeneralFunctions.php:

class Zend_View_Helper_GeneralFunctions
{
    public function generalFunctions(){
        $this->baseUrl=Zend_Controller_Front::getInstance()->getBaseUrl();
        return $this;   
    }

    public function progressMeter() {
        $html='';
        $html.='<span id="progressWrapper">';
        $html.='<span id="progressMeter"></span>';
        $html.='</span>';
        $html.='';
        return $html;
    }
}

أيضا نسيت أن أذكر أن لدي GeneralFunctions مساعد السيارات المحملة في التمهيد مثل هذا وأنها متاحة على جميع وحدات بالفعل:

$view->addHelperPath(APPLICATION_PATH .'/common/helpers', 'View_Helper');

هنا هو ما حاولت, ولكن أنا على خطأ:

// application/Bootstrap.php ----------->
function _initViewHelpers() {
    // add a helper for use for all modules
    $view->addHelperPath(APPLICATION_PATH .'/Common/Helper', 'Common_Helper');
}
//-------------------->


// application/common/helpers/General.php ----------->
class Zend_View_Helper_General extends Zend_View_Helper_Abstract
{
    public function general(){
        return $this;
    }   
    public function test(){
        return 'test 123';
    }
}
//-------------------->

// application/modules/dashboard/views/helpers/DashboardHelper.php ----------->
class Zend_View_Helper_DashboardHelper extends Common_Helper_General
{

    public function dashboardHelper(){
        return $this;
    }

    public function dashboardTest(){
        return 'from dashboard';
    }

}
//-------------------->

// application/modules/dashboard/views/scripts/index/index.phtml ----------->
echo $this->dashboardHelper()->test();
//-------------------->

رسالة الخطأ أحصل على:

خطأ فادح:فئة 'Common_Helper_General' لم يتم العثور على في /Applications/MAMP/htdocs/mysite/application/modules/dashboard/views/helpers/DashboardHelper.php على خط 2

هل كانت مفيدة؟

المحلول

وانها في الواقع حقا بسيطة للاتصال عرض مساعد آخر.

تأكد هذا الرأي مساعدك يمتد Zend_View_Helper_Abstract، بحيث يتضمن الوصول إلى $view. ثم يمكنك ببساطة استدعاء المساعدين كما تفعل من وجهة نظر، أي بمعنى.

$this->view->generalFunctions()->progressMeter();

وبناء على مثالك أعلاه:

<?php

class Zend_View_Helper_FormVars extends Zend_View_Helper_Abstract {

    /* ... */

    public function mkCategoryCodeSelectGroup($codeTypeArr=array(),
        $codesArr=array()) {
        $html='';
        $html. $this->view->generalFunctions()->progressMeter();
        return $html;
    }
}

نصائح أخرى

وأنت ربما لم تكوين الملقم الآلي لتحميل الطبقات من المجلد application/common/helpers/.

وانظر Zend_Application_Module_Autoloader عن المسارات الافتراضية. يجب عليك إضافة مجلد جديد لهذا.

أرى العديد من المشاكل الخاصة بك مع رمز المقدمة.

  1. أنت تحاول الاتصال Zend_View_Helper_GeneralFunctions::generalFunctions() كما أسلوب ثابت عندما أعلن أسلوب فئة (أي لديك إلى إنشاء مثيل فئة استخدامه) عن سبب إغفال static الكلمات الرئيسية.
  2. إذا كنت في الواقع تحتاج إلى استخدام generalFunctions() كما أسلوب ثابت و الصحيح هذا ثم سوف تحتاج إلى إما جعل baseUrl خاصية ثابتة أو سيكون لديك لإعادة إنشاء مثيل فئة ثم عودة تلك الحالة.
  3. فكرة استخدام الخاص بك GeneralFunctions الطبقة الحاوية على أساليب ثابتة تسمى مباشرة هو حقا من أحد أعراض المشاكل مشاكل أعمق و هو بحق المسمى مدونة رائحة.إذا كنت تعتقد أن كنت أكذب نلقي نظرة على ذات الأولوية العالية على زند Framework 2.0 (تلميح:أنها تنطوي على إزالة جميع أساليب ثابتة من الإطار).أو يمكنك أن تسأل دائما حتى ما يعتقدون من أساليب ثابتة :-).

تبحث في إعطاء اسم الفئة العامة وظائف الدرجة Zend_View_Helper_GeneralFunctions وبالنظر إلى السيناريو الحالي حيث تحاول استخدام GeneralFunctions مساعد الداخل مساعد آخر ، وأود أن نخلص إلى أن كنت حقا بحاجة إلى القيام بأحد أمرين.

  1. تحتاج إلى أن يكون في كل فئة المساعد فئة فرعية GeneralFunctions فئة بحيث كل من المساعدين تلك الوظائف المتاحة.في الأساس, اسأل نفسك إذا كان لديك المساعدين جميع تبدأ الحياة كما GeneralFunction المساعدين مع وظائف الموسعة بعده.يستخدم هذا الحل الميراث على حل المشكلة.
  2. كل عرض مساعد يجب أن تحتوي على مثيل كائن العرض لم يتم تنفيذه.لذلك من الناحية النظرية يجب أن تكون قادرة على الوصول إلى أي عرض مساعد عن طريق السحر __call طريقة (أعتقد أن هناك أيضا صريح الطريقة ولكن أنا دائما استخدام طريقة سحرية).قد تبدو مثل ذلك في السيناريو الخاص بك:

    public function mkCategoryCodeSelectGroup($codeTypeArr=array(), $codesArr=array()) 
    {
        $html='';
        $html.= $this->generalFunctions()->progressMeter();
        return $html;
    }
    

    في هذا السيناريو __call طريقة تحميل GeneralFunctions مساعد ثم استدعاء progressMeter() طريقة من GeneralFunctions المساعد.

    الآن GeneralFunctions مساعد من الدرجة ربما تبدو مثل هذا:

    class Zend_View_Helper_GeneralFunctions
    {
        public function __construct()
        {
            $this->baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();
        }
    
        public function progressMeter() {
            $html='';
            $html.='<span id="progressWrapper">';
            $html.='<span id="progressMeter"></span>';
            $html.='</span>';
            $html.='';
            return $html;
        }
    }
    

وأنت تدعو صفك دون instantiating ذلك.

وظيفة generalFunctions() يستخدم مؤشر $this، والتي لن تعمل. كما أنه ليس أسلوب ثابت.

وتعيين خيار واحد مقياس تقدم لتكون وظيفة ثابتة والذي يطلق عليه مباشرة من هذا القبيل:

Zend_View_Helper_GeneralFunctions::progressMeter();

وثمة خيار آخر هو مثيل صفك لأول مرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top