PDA

View Full Version : سوال: اضافه کردن Paginate کامپوننت در داخل کلاس فرزند بدون اینکه $components کلاس AppController بازنویسی



Ebrahim_Rayaneh
یک شنبه 11 مرداد 1394, 19:49 عصر
در cakephp 2.6 و در داخل کنترلر پایه AppController ، یک متغییری هست که بوسیله آن کامپوننت هامونو لود میکنیم ، به اسم $components ، کلاس AppController من به صورت زیر هست:





class AppController extends Controller {

public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'posts',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'pages',
'action' => 'display'
),
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish'
)
),
'authorize' => array('Controller')
)
);
}



و کلاس پست:





class PostsController extends AppController {

public $components = array('Paginator');

//codes here
}



در کلاس پست متغییر $components کلاس والد بازنویسی (اورراید) می شود در صورتی که من می خوام در کلاس بچه (پست) علاوه حفظ متغییر $components والد ، متغییر $components بچه را نیز داشته باشم ، راه حل؟؟؟

vahidqara
یک شنبه 11 مرداد 1394, 20:24 عصر
درود..
کیک انجمن مخصوص به خود رو هم داره به این آدرس
cakephp.ir
و اما یه راه حل اینه شما همشو توی کنترل والد یا همون app بزارید و از همه جا قابل دسترس هست خواستید استفاده کنید نخواستید استفاده نکنید


public $components = array('RequestHandler','Session','Cookie','ShamsiD ate.Shamsi','Paginator','Auth');

Ebrahim_Rayaneh
یک شنبه 11 مرداد 1394, 23:16 عصر
درود..
کیک انجمن مخصوص به خود رو هم داره به این آدرس
cakephp.ir
و اما یه راه حل اینه شما همشو توی کنترل والد یا همون app بزارید و از همه جا قابل دسترس هست خواستید استفاده کنید نخواستید استفاده نکنید


public $components = array('RequestHandler','Session','Cookie','ShamsiD ate.Shamsi','Paginator','Auth');



انجمنی که معرفی کردید بوکمارک کردم حتما سر میزنم :لبخندساده:

در مورد راه حلی که گفتید به ذهن خودمم رسیده بود اما این روش به نظرم پاک کردن صورت مساله هست.
فرض کنید که در کنترلر AppController یه تابعی داشته باشیم به اسم تست:





public function test(){
//codes here
}



اگه در کلاس PostsController هم تابعی همنام داشته باشیم و بخوام که در کنترلر فرزند ، هم تابع جدیدمو داشته باشم و هم تابع داخل کنترلر پدر رو داشته باشم می تونم این طوری بنویسم:





public function test(){
parent::test();
//baghie code ha inja
}



می خوام بگم که همچین راه حل مشابهی برای متغیرها وجود نداره؟؟؟

vahidqara
دوشنبه 12 مرداد 1394, 09:54 صبح
درود.. حتما سر بزنید..
بحث پاک کردن صورت مسئله نیست بحث راه حله دوستم..
بله برای متدها میشه از اون روشی که گفتید (ارث بری ) استفادخ کنید .. البته یه مطالعه در زمینه Request Life-cycle callbacks
داشته باشید.
http://book.cakephp.org/2.0/en/controllers.html
و برای متغیرها به این صورت نیست.. یه حوزه یا محدوده تعریف دارند.. محلی سراسری
وقتی متغیری در app تعریف میکنید در تمای کنترلرهای فرزند در دسترس میباشد و قابل تغییر از نظر محتوا..
حالا میخوای متغیر محلی تعریف کنید در همون کنترلر مد نظر این کارو انجام بدید..
امیدوارم جوابتونو گرفته باشید در غیر این صورت میتونید تو انجمن کیک جستجو و یا دوباره مطرح کنید موفق باشید