ورود

View Full Version : خطا Unable to locate the specified class: Session.php



tooka123
جمعه 26 آذر 1395, 19:17 عصر
سلام
در یک پروژه ، من دو کنترلر در پوشه core ایجاد کرده ام که کنترلر ها از اونها extend می شن و بدون مشکل کار می کرد اما وقتی کدایگنیتر رو به نسخه 3.1.2 آپدیت کردم خطای
Unable to locate the specified class: Session.php
می دهد و زمانی که کنترلر ها از CI_Controller ارث بری کند خطا رفع می شود ، علت این خطا چیست ؟ ممنون

numberone1
جمعه 26 آذر 1395, 20:32 عصر
سلام
در یک پروژه ، من دو کنترلر در پوشه core ایجاد کرده ام که کنترلر ها از اونها extend می شن و بدون مشکل کار می کرد اما وقتی کدایگنیتر رو به نسخه 3.1.2 آپدیت کردم خطای
Unable to locate the specified class: Session.php
می دهد و زمانی که کنترلر ها از CI_Controller ارث بری کند خطا رفع می شود ، علت این خطا چیست ؟ ممنون

پیشوند نام کنترلر باید حتما با چیزی که داخل فایل کانفیگ نوشته شده برابر باشه. در حالت پیش فرض روی MY هست
نکته بعدی هم اینه که شما فقط میتونید از یک فایل برای کنترلر پدر استفاده کنید. استفاده از دو کنترلر غیر ممکنه تو نسخه های فعلی
و اینکه اسم فایل و کلاس به جز پیشوندش حتما باید با اسم اصلیش یکی باشه
مثلا اگر کنترلر اصلی اسمش CI_Controller هست منهای پیشوندش که میشه تغییر داد اینم باید به همون اسم باشه MY_Controller

tooka123
جمعه 26 آذر 1395, 20:58 عصر
سلام
من یک کنترلر پایه در پوشه core درست کردم به نام site_controller و اونو در با استفاده از فایل config فراخوانی می کنم دلیل این کار این بود که می خواستم وقتی مثلا صفحه یک کنترلر رو صدا بزنم تا یک مطلب رو نشون بده همزمان چند کنترلر دیگه مثل نمایش فرم نظر سنجی ، ... رو فراخوانی کنم(هر سرویس من داخل یک کنترلر جداگانه هست)
آیا برای این کار روش مناسبی سراغ دارید تا همزمان چند تابع رو از چند کنترلر مختلف صدا بزنم و در یک view نمایش بدم ؟
علت این خطا برای اینه که در site_controller چند کنترلر رو include می کنم.
ممنون

numberone1
جمعه 26 آذر 1395, 21:12 عصر
سلام
من یک کنترلر پایه در پوشه core درست کردم به نام site_controller و اونو در با استفاده از فایل config فراخوانی می کنم دلیل این کار این بود که می خواستم وقتی مثلا صفحه یک کنترلر رو صدا بزنم تا یک مطلب رو نشون بده همزمان چند کنترلر دیگه مثل نمایش فرم نظر سنجی ، ... رو فراخوانی کنم(هر سرویس من داخل یک کنترلر جداگانه هست)
آیا برای این کار روش مناسبی سراغ دارید تا همزمان چند تابع رو از چند کنترلر مختلف صدا بزنم و در یک view نمایش بدم ؟
ممنون

منظورت و متوجه نشدم درست!!
اسمش مهم نیست یا MY_Controller یا siite_controller فرقی نمیکنه. فقط از یک فایل میتونی استفاده کنی. برای اینکه از چند تا کنترلر پدر استفاده کنی میتونی چند تا کلاس و توی همین فایل بنویسی
کار کنترلر پدر که کنترلر های فرزند ازش مشتق میشن انجام کارهای ثابت توی همه کنترلر هاست تا از انجام کار های تکراری توی تمام کنترلر ها خلاص بشی
توی کدایگنایتر 3 یه تاببع جادویی به اسم _remap درست شده که میتونی توی هر کنترار فراخوانیش کنی. کارش اینه که یه متد و از اون کنترلر فراخوانی میکنه و اجرا میکنه. راهنماش و بخون
یه راه دیگه هم هست اینه که توی کنترلر های دیگه دستی فایل کنترلر دیگه رو اینکلود کنی یه new ازش بسازی و استفاده کنی

tooka123
جمعه 26 آذر 1395, 21:28 عصر
سلام
وقتی یک کنترلر دیگه رو دستی include کنم باز این خطا رو می ده

numberone1
جمعه 26 آذر 1395, 21:36 عصر
سلام
وقتی یک کنترلر دیگه رو دستی inlude کنم باز این خطا رو می ده

اولا که کد و بزار بعدم متن ارور و بزار . بعد کد و کجا گذاشتی؟ تو کدوم فایل اینکلود کردی ارور گرفتی؟
کسی با حدس زدن نمیتونه کمکت کنه

tooka123
جمعه 26 آذر 1395, 21:55 عصر
سلام
ممنون که جوابمو می دی ، منظورم از "باز این خطا رو می ده " همون خطای Unable to locate the specified class: Session.php هست

من یک کنترلر اصلی دارم به نام home که از site_controller ارث بری می کند ، تمام سرویس های من در کنترلرهای جداگانه هست ، نمایش مطلب کنترلر content و ...
در صفحه قالب سایت چند location دارم ، یکی برای نمای منو و فرم نظر سنجی و ...
من در تابع index کنترلر home یک تابع از site_controller که با نام page_content هست رو صدا می زنم و داخل اون تابع همه کنترل های مورد نیازم رو include می کنم و داخل یک متغی با نام های مختلف می ذارم و در تابع index کنترلر home صفحه قالب سایت رو فراخوانی می کنم و هر متغیر رو در جای خودش قرار می دم ، این کار در نسخه قبلی مشکل نداشت ولی با آپدیت اون به 3.1.2
خطای Unable to locate the specified class: Session.php رو نشون می ده




class Home extends Site_Controller{
//========================================
function __construct(){
parent::__construct();
}
//========================================
function index($content = ''){

$data= $this->page_content ();
.
.

$this->load->view($template, $data);
}

numberone1
جمعه 26 آذر 1395, 22:10 عصر
کد صفحه site_controller و هم بزار

tooka123
جمعه 26 آذر 1395, 22:20 عصر
$file = 'application/controllers/' . $controller .'.php';
if(file_exists($file) && is_file($file)){
require_once($file);
$ci = new $controller();
return $ci->$method();
}

متغیرcontroller و method در بالای صفحه تعریف شده اند اگر قسمت new $controller() رو بردارم خطا از بین میره
البته این کد در یک حلقه هست و چندین بار اجرا می شه و چند کنترلر فراخوانی می شه

numberone1
جمعه 26 آذر 1395, 22:39 عصر
اینجوری خیلی نمیتونم کمکت کنم با این 2-3 خط کد
اگر نمیخوای کداتو نشون کسی بدی میتونی از فولدر system/core/common.php نگاه کنی ببینی اون چجوری فایل و فراخوانی کرده از همون روش استفاده کنی