وظيفة الاتصال في وحدة تحكم أخرى في YII
سؤال
لقد قمت بإنشاء وحدات تحكم 2 في تطبيق Yii الخاص بي: FirstController.php و SecondController.php في مسار التحكم الافتراضي.
FirstController.php:
<?php
class FirstController extends Controller {
public static function returnFunc() { return 'OK'; }
}
SecondController.php:
<?php
class SecondController extends Controller {
public function exampleFunc() {
$var = First::returnFunc();
}
}
عندما أحاول التنفيذ exampleFunc()
في SecondController ، yii رمي الخطأ:
YiiBase::include(FirstController.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory
الدعوة FirstController::returnFunc()
بالمثل لا تعمل.
أنا جديد في إطار OOP و YII. ما هي المشكلة؟
المحلول
لقد حلت هذه المشكلة. لا يقوم Autoloader بتحميل وحدات التحكم.
كان في config/main.php
:
'import' => array(
'application.models.*',
'application.components.*',
),
كل العمل مع هذا:
'import' => array(
'application.models.*',
'application.components.*',
'application.controllers.*',
),
نصائح أخرى
class ServiceController extends Controller
{
public function actionIndex()
{
Yii::import('application.controllers.back.ConsolidateController'); // ConsolidateController is another controller in back controller folder
echo ConsolidateController::test(); // test is action in ConsolidateController
class ServiceController extends Controller
{
public function actionIndex()
{
Yii::import('application.controllers.back.CservicesController');
$obj =new CservicesController(); // preparing object
echo $obj->test(); exit; // calling method of CservicesController
عندما تقوم بإنشاء مشروع YII ، فإن كل من وحدات التحكم الخاصة بك تقوم بتوسيع فئة وحدة التحكم ، ويمتد تلك الفئة المدمجة في CController من فئة Yii.
هذا لطيف لأن وحدة التحكم هي فئة داخل التطبيق الخاص بك (يمكن العثور عليها في مجلد المكونات).
إذا كنت ترغب في الوصول إلى طريقة من قبل كل من وحدات التحكم الخاصة بك ، فضع هذه الطريقة في فئة وحدة التحكم ، وبما أنهما تمديدها. سيكون كل من الوصول. فقط تأكد من إعلانه إما عام أو محمي.