سؤال

يبدو أنني لا أستطيع تسجيل مساعد عرض مخصص في zend Framework 2.02، لقد جربت جميع الحلول المنشورة هنا وأي شيء أعتقد أنه يجب علي فعله ولكني أتلقى هذا الخطأ باستمرار:

خطأ فادح:لم يتم العثور على الفئة 'ModuleName\view\Helper\mylinkhelper' في C:\wamp\vhosts\projectName\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php على السطر 177

وإليك كيف يبدو نموذجي Module.config.php:

return array{
      'controllers'=>array(

           ....
       ),
      'view_manager' => array(
          'template_path_stack' => array(
             'ModuleName' => __DIR__ . '/../view',
           ),    
   ),
   'view_helpers' => array(  
            'invokables' => array(  
                 'mylink' => 'ModuleName\view\Helper\mylinkhelper',   
             ),  
       ),
};

في ملف العرض الخاص بي، لدي:

echo $this->mylink($someparameter); 

وأنا أقدر أي ردود فعل على هذا.لا أعرف حقًا ماذا أفعل هنا.

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

المحلول

<?php
// ./module/Application/src/Application/View/Helper/AbsoluteUrl.php
namespace Application\View\Helper;

use Zend\Http\Request;
use Zend\View\Helper\AbstractHelper;

class AbsoluteUrl extends AbstractHelper
{
    protected $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function __invoke()
    {
        return $this->request->getUri()->normalize();
    }
}

ستلاحظ أن هذا المساعد تحديدًا له تبعية — كائن Zend\Http equest.لإدخال هذا، سنحتاج إلى إعداد مصنع باستخدام منطق التهيئة لمساعد العرض الخاص بنا:

    <?php
    // ./module/Application/Module.php
    namespace Application;

    use Application\View\Helper\AbsoluteUrl;

    class Module
    {
        public function getViewHelperConfig()
        {
            return array(
                'factories' => array(
                    // the array key here is the name you will call the view helper by in your view scripts
                    'absoluteUrl' => function($sm) {
                        $locator = $sm->getServiceLocator(); // $sm is the view helper manager, so we need to fetch the main service manager
                        return new AbsoluteUrl($locator->get('Request'));
                    },
                ),
            );
        }


     // If copy/pasting this example, you'll also need the getAutoloaderConfig() method; I've omitted it for the sake of brevity.
}

هذا كل شيء!يمكنك الآن الاتصال بمساعدك في عرض البرامج النصية الخاصة بك:

عنوان URL الكامل للصفحة الحالية هو: <?php echo $this->absoluteUrl(); ?>

بفضل ايفان لإنشاء هذا درس تعليمي

نصائح أخرى

يبدو أنه تمت إضافة مساعد العرض بشكل صحيح إلى ملف ServiceManager منذ الاستدعاء mylink() يحاول خلق ModuleName\view\Helper\mylinkhelper.

سأتأكد من أن الفصل قابل للإنشاء باستخدام new College\view\Helper\mylinkhelper(); من وحدة التحكم، من المحتمل أن يؤدي ذلك إلى إلقاء بعض القرائن.تحقق أيضًا من صحة اسم الملف واسم الفئة.

طريقتك صحيحة، ولكن قد يكون هناك أمران يسببان لك هذه المشكلة:

  1. أنت تتحدث عن مساحة الاسم ذات المستوى الأعلى ModuleName, ، ولكن في مثال التكوين لديك مساحة الاسم ذات المستوى الأعلى College.عندما يكون لديك ModuleName مساحة الاسم وحاولت التحميل College, ، ومن الواضح أن هذا لا يعمل

  2. لا يمكن تحميل مساعد العرض الخاص بك تلقائيًا.هل أنت متأكد من صحة اسم الفصل (MyLinkHelper)، مساحة الاسم صحيحة (College\View\Helper, ، انظر أيضًا أعلاه) واسم الملف صحيح (MyLinkHelper.php).وهل قمت بتمكين التحميل التلقائي لاسم الفئة لهذه الوحدة في فئة الوحدة الخاصة بك؟

قد يكون الخيار الثالث هو "عرض" و"mylinkhelper" بالأحرف الصغيرة كما تكتب عادةً College\View\Helper\MyLinkHelper برأس مال V وM وL وH.ولكن نظرًا لأنك تستخدم نظام التشغيل Windows، فلا ينبغي أن يكون ذلك مهمًا.أعلم أنه بالنسبة لنظام التشغيل Linux، يجب أن تكون على دراية بحساسية حالة أسماء الفئات.

المشكلة هي أن لا يتم تحميل ملف الفئة.من المفترض أن يتم تضمينه في autoload_classmap.php.

<?php
return array(
    '{module}\View\Helper\{helper}' => __DIR__ . '\View\Helper\{helper}.php',
);
?>

لقد واجهت نفس المشكلة وساعدتني هذه الصفحة.

نظرًا لأنني جديد على ZF، لا أعرف ما إذا كانت هناك طريقة أخرى لإضافة المسارات في autoload_classmap، أعتقد أنه من المحتمل وجودها، لكنني قمت للتو بتحرير الملف يدويًا.

حصلت على نفس المشكلة، اكتشفت نفسي هذا عرض ملف المساعد لم يتم تضمينه.أثناء وضعه في وحدة تحكم لاختباره يعمل

e.g.: require_once('module/Pages/view/Helper/RenderNav.php');

لماذا لم يتم التحميل أو تلقائيا؟

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