توسعه سیستم routing
برای اینکه همچین URLای داشته باشیم شبیه سایت uncox :
https://account.uncox.com/user/message/ajaxGetAllNotify
یک کنترلر داریم به اسم user و بعدش بازم انگار یک کنترلر داریم و بعدش متد ajaxGetAllNotify برای پیاده سازی این روش چیکار باید بکنیم؟
آیا user و message هر دو کنترلر هستند؟
class AdminController{
public function allPosts(){
//fetch all posts from model
}
public function newPost(){
//insert post
}
public function removePost(){
//remove post
}
public function updatePost(){
//update post
}
public function allUsers(){
//fetch all users from model
}
public function newUser(){
//insert new user
}
public function removeUser(){
//remove user
}
public function updateUser(){
//update user
}
}
چطور کلاس های مختلف رو ایجاد کنیم و همچنان از طریق url بتونیم بهشون دسترسی داشته باشیم.
در کنترلر admin بالا که مثال زدم ، الان همونطور که مشخصه عملیات مربوط به user و post نشون داده شده حالا اگر قرار باشه کلی عملیات دیگه هم نوشته بشه خیلی شلوغ میشه طبق توضیحات شما باید برای هرکدوم (user,post,...) کلاس جداگانه ایجاد بشه و دقیقا همین متدها اونجا هم نوشته بشه و اینجا آینه ای از اون متدها باشه. مثلا برای عملیاتهای مربوط به post به این شکل بشه:
class AdminContoller{
public function newPost(){
Post::newPost();
}
public function removePost(){
Post::removePost();
}
}
آیا برداشتم درسته از توضیحات شما؟
اگر اینطوری باشه بازم بنظرم خیلی خوب نیست عملا فرق چندانی با حالت قبل نداره.
اگر درست متوجه شده باشم شما میخواید که متد های موجود در AdminController رو در کلاس های مختلف خلاصه کنید .
شما میتونید یک کلاس جدید مثلا با عنوان Post بزنید که از AdminController اکستندز شده باشه اینطوری کانستراکتور AdminController هم صدا میشه و بررسی های لازم انجام میشه و داخل کلاس POST متد های مربوط به مدیریت پست ها رو قرار بدید :
class Post extends AdminController {
public function removePost(){
}
public function EditPost(){
}
}
مسئله اینجاست که چطور باید توی URL این کلاس و متدهاش رو صدا بزنیم ، مثلا اگر بخوایم یک پست رو ویرایش کنیم فرضا آدرسش میشه این چون قرار هست از پنل مدیریت ویرایش بشه:
http://website.com/admin/editPost
اما طبق چیزی که گفتید باید اینو بزنیم:
http://website.com/post/editPost
در این حالتم مشکلی پیش نمیاد و میشه از طریق parent و کنستراکتورش سطح دسترسی رو مشخص کرد اما من میخوام که تماما بیان داخل admin و از اونجا دستور مربوطه فراخوانی بشه ، یعنی بدین شکل:
http://website.com/admin/allPosts http://website.com/admin/editPost http://website.com/admin/allUsers http://website.com/admin/editComment
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .