بنية الكيك وأول controller
بسم الله الرحمن الرحيم
كنا قد تحدثنا في الأجزاء الماضية في التطوير عن:
واليوم سنكمل في مشروع قائمة المهام حيث سنستعرض بنية الكيك بعد أن ثبتناه وربطناه مع قاعدة البيانات وسنقوم بكتابة الكود الخاص بجزء controller وهو الجزء المنطقي من بنية MVC.
تتكون بنية الكيك من مجلدين أساسيين هما app و cake، فمجلد cake يحوي جميع المكتبات والأصناف الخاصة بالكيك ولايجب بحال من الأحوال أن نعدل فيه، فعملنا سيقتصر على مجلد app حيث سيحتوي على كامل المشروع.
الأن سندخل إلى مجلد app وسنشرح بنيته بشكل مفصل:
- config: يحتوي هذا المجلد على إعدادات الموقع كلها سواء ربط قاعدة البيانات،إعدادات الكاش وحالة الموقع بشكل عام.
- controllers: سيحتوي على جميع الأصناف الخاصة بالجزء المنطقي من مشروعنا.
- locale: توضع به ملفات اللغات في حال كان الموقع بعدة لغات.
- models: يحتوي على الأصناف التي ستتعامل مع قاعدة البيانات.
- plugins: الإضافات، كلنا نعرفها … إذا أردنا صنع إضافة للموقع نضعها هنا.
- tests: نضع بها ملفات الاختبار للموقع (موضوع متقدم سنتحدث عنه لاحقاً).
- tmp: يستخدمه الكيك لعملية الكاش، حيث يخزن بداخله الملفات.
- vendors: المكتبات الخارجية التي نريد التعامل معها في هذا المجلد.
- views: الجزء الثالث من بنية (MVC)، حيث تحتوي على ملفات العرض.
- webroot: يوجد داخله العديد من المجلدات:
- css: نضع به ملفات CSS الخاصة بإظهارات الموقع.
- files: يستخدم لتخزين الملفات أي الملفات التي نريد رفعها على السيرفر.
- img: الصور الخاصة بالموقع.
- js: نضع به ملفات الجافاسكربت.
هذه تقريباً نظرة سريعة نوعاً لكن مفصلة على بنية الكيك داخل مجلد app الذي يهمنا في تطوير المشروع.
ملاحظة هامة وهي أنه مقابل كل جدول في قاعدة البيانات يجب أن يقابله:
- ملف خاص به في مجلد controllers
- ملف خاص به في مجلد models (في بعض الحالات التي نتكب بها محتويات ثابتة لا نحتاج لها الملف).
- مجلد خاص به في مجلد views حيث يحتوي المجلد على جميع ملفات الإظهار الخاصة بهذا الجدول، سنستعرضه بالتفصيل لاحقاً.
سنكتب أول controller وهو الخاص بجدول lists الآن أصبح groups. نتوجه إلى مجلد controller وننشىء ملف اسمه:
groups_controller.php
هذا الاسم يجب أن يكون بهذا الشكل أي اسم الجدول_controller واللاحقة php …
نقوم بتحرير الملف باستخدام أي برنامج تحرير ملفات … ونكتب التالي:
<? php class GroupsController extends AppController { var $name = 'Groups'; } ?>
ماذا حصل الأن؟
- أولاً الشفرة التي نكتبها هي PHP لذلك وضعناها داخل مجال PHP وهكذا جميع الشفرات في جزء controller حيث لانقوم بكتابة أي إظهار أو أي شفرة HTML مثلاً.
- عرفنا صنف جديد اسمه GroupsController وهذا الصنف يرث من الصنف الأب لكل أصناف controller وهو AppController.
- لاحظوا اسم الصنف البرمجي وهو GroupsController، يجب أن نكتب اسم الجدول في قاعدة البيانات ولكن بحرف كبير متبوعاً بكلمة Controller أيضاً بحرف كبير.
لماذا نرث من الصنف الأب AppController؟
هذا الصنف الأب يحتوي بداخله على كل الأشياء التي يستعملها الكيك في بنية controller، فهو يحتوي على جميع التوابع المهمة للتعامل مع models ومع views ومع الكثير من الأصناف الآخرى. لذلك إن لم نرث منه فسنضطر إلى كتابة هذه التوابع في كل صنف وهذا مايخالف معمارية البرمجة الغرضية التوجه OOP. أما إذا ورثنا منه فسنستخدم كل خصائصه وتوابعه بشكل سهل وبسيط.
داخل هذا الصنف عرفنا متحول اسمه name وهذا الاسم لايجب تغييره وأعطيناه قيمة Groups. هذه الخطوة مهمة لنسخة PHP4 فقط. أما بالنسبة لمستخدمي PHP5 فهي ليست ضرورية.
هذا كل شيء لليوم وغداً سنكمل إن شاء الله …












[...] بنية الكيك وأول controller [...]
أيوه كده أخيرا بدأنا فى الجد
بس فى سؤالين أولا أليس من المفروض عمل ال model قبل إنشاء ال controller
ثانيا: هل إسم الكلاس فى الكونترولر ListsController يجب أن يكون بهذه الصيغة مثل إسم الملف
شكرا لك…
جيد خالد .
هناك ملاحظه صغيره خاصه بموضوع التسميات في الـ CP .
للاستفاده من مزايا الـCP , يجب اتباع نمط الاسماء الحدد فيه , مثلاً اسم الصنف الخاص بالمتحكم , يجب ان يكون بشكل جمع , ويتعمد نمط الـ CamelCased و يكون ملحوقاً بلكمه Controller .
للمزيد , يمكن مراجعه :
http://book.cakephp.org/view/22/cakephp-conventions
@ بسام , سلم لي على راعي المعصوب
..
@sfsf: لا أهمية كبيرة في الترتيب الأن …
@بسام: أهلاً بك
@محمد: فعلاً ونسيتها تماماً سأعدل التدوينة الأن لأضع الملاحظة
كل شيء واضح حتى الآن…
لكن سؤال: هل يجب إعطاء ملف tmp الصلاحيات الكاملة عند رفعه على الخادم، بما أنه يضم ملفات الكاش، و هل يشكل ذلك أي خطر…
سلام خالد
الله يوفقك ويبارك بوقتك , إن شاء الله عن قريب رح تلاقيني متابع مستمر لكيك بي اش بي , ووقتها لحق على أسئلتي إذا بتلحق
سلام
السلام عليكم خالد
جزاك الله خيرا على جهدك
وجزاك الله خيرا على هذا الشرح الواضح
أنا عموما عملت حاجة حاسس حتى الآن إنها فادتني جدا
وجدت وصلة في صفحة التستيب لعمل مدونة بالكيك
ووجدت شرحها في الـ Manual بتاع الكيك
لم تأخذ مني أكثر من ساعة تقريبا ولكنها علمتني وبسهوله بعض الأساسيات التي أظنها ستساعدني على فهم ما تقوله هنا بوضوح
نصيحتي لكل واحد أن يحاول أن يتابع طريقة العمل على المانوال ويعملها
لمن سيجرب النصيحة لا تعمل في نفس الملف بتاع قائمة المهام أنشئ ملف جديد حتى لا تختلط عليك الأمور
وشكرا
@aMINE: إلا إذا حددت مالك الملف بواسطة الأمر chown
@نور: أهلاً بك ومبروك المدونة
@أبو بكر: فعلاً عندما بدأت بالكيك قبل سنة بدأت بهذه المقالة فهي مفيدة جداً
عندي بعض الملاحظات على تعريب بعض المصطلحات
و التي قد تختلف من مكان الى اخر مثل :
توابع = دوال
متحول = متغير
لذلك افضل لو تستخدم المصطلح الاصلي :
توابع = functions
متحول = variable
صنف = class
صدقني افضل بكثير و اسهل و اسرع في الفهم
هممم أفضل دائماً تلافي الكلمات الأجنبية واستخدام التعريب المرادف لها حتى لو كان صعب الفهم واللفظ! على كل سأحاول قدر المستطاع أن يكون المصطلح المعرب مفهوماً للجميع واستخدام المصطلحات التي عربها فريق عرب آيز
السلام عليكم. أخي الحبيب لم لا تصحح هذه التدوينة. أنت تخبرنا أن فيها أخطاء،
أشعر أن هناك خطوات ناقصة.
أتراجع عن الرد الأخير
. يبدو أنني لم أقرأ القسم المختص بقواعد البيانات – أعلم أنني أستطيع تصميمها بنفسي ولكنني كنت أريدها منك – ولم أكن أعلم أنك وضعتها، عندما راجعت موضوع الدورة وجدتها!
.
شكراً
ربما تحتاج لوضع رابط لصفحة فهرس الدورة أسفل كل تدوينة من أجل عيون الكسالى السود
<< أنا وغيري!
هي موجودة في أعلى التدوينة أخي عمر!
[...] في بداية الأمر قمنا بمناقشة تحميل وتثبيت الكيك، بدأنا بأول متحكم وهو groups، وبعد ذلك أكملنا به وتناقشنا بمفهوم [...]
اخي خالد السلام عليكم وبالنسبة للفئة التي ابتدات بها فكيفية تسمية الجدول user_list مثلا هل تكون
User_listController ؟
واخيرا شكرا على المجهود
أيضاً في تدوينة قادمة إن شاء الله. وبإذن الله غداً
[...] إحدى الجمل المشهورة لدى الخبازين (مطوري الكيك كما يحبوا أن يطلق عليهم): convention over configuration ويعنون به أنك إذا تقيدت باصطلاحات الكيك فالكيك لن يتعبك بالإعدادات كما تفعل باقي الأطر. هذه نقطة مهمة تقودنا للتساؤل عن اصطلاحات الكيك، ماهي وحالاتها المختلفة؟ شاهدنا خلال سلسلة تعلم الكيك العديد من هذه الاصطلاحات ولكن ربما اختلط على البعض وهناك أيضاً حالات لم نلتقي بها والشكر للأخ محمد العاني الذي سألني عنها. [...]
تعقيباً على سؤال الأخ محمد العاني:
http://dev.holooli.com/2008/10/05/%D8%A7%D8%B5%D8%B7%D9%84%D8%A7%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%83%D9%8A%D9%83/