وقتی که در حال کد نویسی یک طرح وب سایت هستید بارها صفحه مرورگر رو رفرش می کنید تا تغییرات را مشاهده کنید و این کار ممکنه به یه عادت تکراری و خسته کننده براتون تبدیل شده باشه ! اگر از gulp استفاده می کنید برای توسعه frontend توصیه میکنم پلاگین livereload رو حتما نصب کنید تا خیلی سریع و بدون نیاز به رفرش دستی حاصل تغییرات کار خودتون رو روی مروگر مشاهده کنید.
خوب میریم سراغ نصب و استفاده از پلاگین Livereload در gulp.
قبل از اینکه تنظیمات گالپ رو انجام بدید برای اینکه پلاگین به صفحه وب شما متصل بشه و بتونه عملیات رفرش رو انجام بده نیاز دارید که اکستنشن مربوط به Livereload رو بر روی مرورگرتون نصب کنید، برای نصب به این لینک مراجعه کنید.
برای نصب پلاگین در گالپ دستور زیر رو تو محیط خط فرمان اجرا کنید تا پلاگین نصب بشه
npm install --save-dev gulp-livereloadبا اجرای کد بالا پلاگین Livereload نصب شده و همچنین در فایل package.json هم اضافه می شود. حالا فایل gulpfile.js که تنظیمات مربوط به gulp در آن قرار داره رو باز کنید و دستورات زیر را وارد نمایید
var gulp = require('gulp');
var livereload = require('gulp-livereload');
gulp.task('changeHtml', function() {
gulp.src('./*.html')
.pipe(livereload());
});
gulp.task('default', ['changeHtml'], function() {
livereload.listen();
gulp.watch('./*.html', ['changeHtml']);
});
سپس از طریق خط فرمان به مسیر پروژه خودتون برید و دستور gulp رو اجرا کنید تا صفحه وب شما رفرش بشه و همچنین gulp فایل index.html رو زیر نظر میگیره و در صورتی که تغییری در این فایل ایجاد بشه مجددا صفحه رو رفرش میکنه.
صفحه وب تون را باز کنید و در نوار ابزار مرورگر بر روی ایکون مربوط به اکستنشن Livereload کلیک کنید تا به پلاگین livereload در گالپ متصل بشه و رفرش ها به درستی انجام بشه.
موفق باشید
 
		چند ماهی هست که نسخه جدید فریم ورک کیک پی اچ پی منتشر شده اما متاسفانه مطالب فارسی برای این نسخه وجود نداره و ندیدم هیچ وبلاگ یا سایتی در مورد این نسخه آموزشی گذاشته باشه، به همین خاطر تصمیم دارم تا جایی که می تونم و وقت وعلمم اجازه میده در مورد این نسخه مطالبی رو بنویسم.
خوب واسه شروع میریم سراغ نصب این فریم ورک محبوب، برای راه اندازی کیک پی اچ پی ۳ شما نیاز به یک سری پیش نیازها دارید.
نسخه php وب سرور شما باید حداقل ۵٫۵٫۹ باشه و همچنین اکستنشن های mbstring و intl برای php فعال باشند.
اگر از xampp یا wamp استفاده می کنید معمولا mbstring به صورت پیش فرض نصب هست اما intl رو باید فعال کنید.
در xampp برای فعال کردن intl فایل تنظیمات php.ini رو باز کنید و به دنبال خط extension=php_intl.dll بگردید و این خط رو از حالت comment در بیارید (کاراکتر ; رو از ابتدای اون خط بردارید) و وب سرور رو راه اندازی مجدد کنید.
برای wamp هم یک سری فایل با نام های icu*.dll  در مسیر  {C:\wamp\bin\php\php{version  وجود داره که باید یک کپی از این فایل ها رو در مسیر  C:\wamp\bin\apache\apache{version}\bin قرار بدید و بعد وب سرور رو restart کنید.
برای کار با دیتابیس های مختلف کیک از اکستنشن pdo استفاده میکنه پس حواستون باشه که این اکستنشن هم باید فعال باشه.
کیک پی اچ پی تو این نسخه پیشنهاد کرده که از ابزار composer که برای کنترل نیازمندیهای برنامه در php نسخه ۵٫۳ به بالا هست استفاده کنید(اطلاعات بیشتر در سایت این ابزار) .
برای نصب composer تو ویندوز، به راحتی میتونید از طریق فایل exe ای که در اختیارتون قرار میده، این ابزار رو نصب کنید .
حالا برای نصب cakephp به مسیر فایل اجرایی composer برید و دستور زیر رو اجرا کنید (مثلا فایل اجرایی کامپوزر تو سیستم من تو این آدرس هست C:\ProgramData\ComposerSetup\bin)
php composer.phar create-project --prefer-dist cakephp/app my_app_name
به جای my_app_name مسیر و نام پروژه تون رو بنویسید مثلا c:\xampp\htdocs\cakephp3_app .
پس از اجرای این دستور، composer شروع به دانلود کیک و همچنین کتابخونه های موردنیاز برای اجرای کیک میکنه و اون ها رو برای شما نصب میکنه و بسته به سرعت اینترنت شما ممکنه کمی طول بکشه . پس از اتمام این مرحله شما یک نسخه از فریم ورک cakephp رو در اختیار دارید و میتونید شروع به توسعه پروژه خود کنید.
همچنین برای اینکه هر بار برای ساخت پروژه جدید کیک و یا یه طور کلی کار با composer مجبور نباشید به مسیر نصب اون برید بهتر هست که فرمان composer رو به صورت سرتاسری تو سیستمتون تعریف کنید و تو هر جایی که میخواید پروژه جدید بسازید دستور زیر رو اجرا کنید
composer create-project --prefer-dist cakephp/app my_app_name
برای تعریف فرمان composer به صورت سرتاسری، تو ویندوز ۸٫۱ روی Mycomputer راست کلیک کنید و properties رو انتخاب کنید، تو پنجره باز شده از سمت چپ روی گزینه advanced system settings کلیک کنید و تو پنجره جدیدی که باز میشه در انتهای پنجره روی دکمه Environment Variables کلیک کنید و از بخش system variables گزینه path رو پیدا کنید و روی edit کلیک کنید، در انتهای مقدار این متغیر اگر ; وجود نداره یک ; بزارید و بعد مسیر فایل اجرایی کامپوزر (C:\ProgramData\ComposerSetup\bin) رو به اون اضافه کنید، دقت کنید آدرس هایی که تو این قسمت قرار دارند باید با ; از هم تفکیک شده باشند.
تو پست های بعد سعی میکنم بیشتر در مورد نسخه ۳ فریم ورک cakephp بنویسیم، امیدوار این مطلب براتون مفید بوده باشه، موفق باشید
 
		خیلی وقت ها شده که به دلیل کثرت کارت های بانکی رمزعبور کارت هایی رو که خیلی وقت قبل تر استفاده کردید رو از یاد می برید و یا به اشتباه می افتید که کدوم رمز رو روی کارتتون گذاشتید ! و یا اینکه نیاز به اطلاعات حساب بانکی تون مثله شماره کارت،شماره حساب،رمز اینترنتی و … دارید ویا مثلا تو شبکه های اجتماعی متفاوت عضو هستید و رمزهای مختلفی برای اکانت هاتون گذاشتید ، اینجاست که رمزبان به کمک شما میاد . رمزبان یک اپلیکیشن اندرویدی هست که به شما کمک می کنه تا با اطمینان خاطر رمز های عبور و اطلاعات شخصیتون رو به صورت محرمانه نگه داری کنید و به راحتی به آن ها دسترسی داشته باشید .
برای دریافت رمزبان از کافه بازار روی لینک زیر کلیک کنید :
دریافت اپلیکیشن رمزبان از کافه بازار
 
		چند روزی قبل از اعزام به خدمت مقدس! سربازی تصمیم گرفتم که وقت آزادم رو برای نوشتن یک برنامه تحت سیستم عامل اندروید بزارم تا هم یک نمونه کار به کارهام اضافه بشه و هم اینکه تجربه بیشتری تو این زمینه پیدا کنم که در نهایت شروع به نوشتن یک برنامه در زمینه نمایش نرخ روز خودرو ، سکه ، طلا و ارز کردم و کم کم رو برنامه کار کردمُ توی آخرین مرخصی  کامل و آماده منتشر شدن شد و به پیشنهاد برادرم امیر اسمش رو نرخ روز گذاشتم.
برای نمایش نرخ ها از سایت های معتبر دولتی و خبری استفاده شده به این صورت که سایت هایی که دارای فید rss بودن از فیدهاشون استفاده کردم و برای یک سری از سایت ها هم که فید نداشتند با استفاده از regex اطلاعات مورد نیاز رو استخراج کردم. به شخصه دوست داشتم روی رابط کاربری برنامه بیشتر کار کنم اما متاسفانه وقت زیادی نداشتم و دیدم اگر بخوام برنامه رو منتشر نکنم با این اوضاع تایمی که دارم چند ماهی عقب میفته و به همین خاطر برنامه رو برای مارکت های مختلف ایرانی فرستادم تا منتشر بشه.
امیدوارم که برنامه ی مفیدی باشه .
برای دریافت برنامه از کافه بازار روی این لینک کلیک کنید.
 
		خیلی وقت بود که در زمینه برنامه نویسی اندروید مطالعه داشتم و برنامه هایی هم برای تست و یادگیری نوشته بودم اما متاسفانه فرصت نکرده بودم که یه برنامه کامل و مناسب که بشه منتشرش کرد رو آماده کنم ، به همین خاطر و برای شروع تصمیم گرفتم یه برنامه ساده و در عین حال کاربردی رو با عنوان “دفترچه”  بنویسم تا هم شروعی باشه برای خودم و هم اینکه کاربران فارسی بتونن ازش استفاده کنند .
با استفاده از این برنامه می تونید یادداشت هاتون رو ذخیره و مدیریت کنید و یا با دیگران به اشتراک بگذارید. همچنین در صورت تمایل می تونید برای برنامه رمزعبور تعیین کنید تا فقط خودتون به یادداشت ها دسترسی داشته باشید.
این برنامه رو می تونید از مارکت ایرانی کندو دانلود کنید و اگر انتقاد یا پیشنهادی دارید تو کامنت ها اعلام کنید .
امیدوارم که مفید واقع بشه …
 
		روش مناسب برای نصب فریم ورک کیک پی اچ پی روی هاست قرار دادن هسته کیک و برنامه ای که نوشتیم در پوشه ای خارج از فولدر public_html یا همون پوشه root سایت مون هست .برای این کار محتویات فولدر webroot رو در شاخه اصلی هاستمون باید قرار بدیم و در فایل index.php سه ثابت (define) با نام های ROOT ، APP_DIR و CAKE_CORE_INCLUDE_PATH رو مقداری دهی کنیم .
ثابت ROOT باید حاوی آدرس پوشه ای باشه که در برگیرنده برنامه ما هست .
ثابت APP_DIR تعیین کننده نام پوشه برنامه ما هست که به صورت پیش فرض این پوشه app نام داره و می تونیم تغییرش بدیم.
ثابت CAKE_CORE_INCLUDE_PATH هم باید شامل آدرس پوشه در برگیرنده هسته کیک باشه .
به عنوان مثال فرض کنید نام پوشه برنامه ای که نوشتیم ، webnevis_app هست و ما این پوشه رو در آدرس home/payam/webnevis.net/adsmarket.ir/private قرار دادیم و همچنین هسته کیک (پوشه lib) رو هم در همین آدرس قرار دادیم بنابراین مقادیر این سه ثابت به شکل زیر خواهد بود :
if (!defined('ROOT')) {
	define('ROOT', '/home/payam/domains/webnevis.net/private');
}
if (!defined('APP_DIR')) {
	define('APP_DIR', 'webnevis_app');
}
define('CAKE_CORE_INCLUDE_PATH', '/home/payam/domains/webnevis.net/private/lib');
این روشی که با هم بررسی کردیم یکی از روش های نصب کیک هست ، برای اطلاعات بیشتر می تونید این لینک رو مطالعه کنید.
 
		اگر می خواهید قبل و یا بعد از فراخوانی یک فرآیند خاص مانند ذخیره کردن اطلاعات و یا نمایش اطلاعات به کاربر و کارهایی از این قبیل ، عمل خاصی را انجام دهید، راه حل پیش رو ، متدهای callback هستند . این متدها به صورت خودکار اجرا می شوند و در بخش های Controller و Model با توجه به نیازمان ، می توانیم آنها را تعریف کنیم .
Controller
- متد beforeFilter :
یکی از مهم ترین متدهای موجود در این بخش  هست ، که قبل از اجرای هر اکشنی در کنترلر مربوطه فراخوانی می شود( حتی هنگامی که اکشن درخواست شده در کنترلر تعریف نشده باشد)  و بهترین مکان برای انجام کارهایی از قبیل اعتبارسنجی جلسه (session) کاربر ، چک کردن سطح دسترسی کاربر و … هست .
- متد beforeRender :
این متد بعد از اجرای اکشن درخواست شده و قبل از نمایش view به کاربر ، اجرا می شود و آنچنان مورد استفاده ندارد ، اما گاهی وقت ها که نمایش خودکار(autoRender) در کنترلر را غیر فعال کرده ایم و با استفاده از متد render به صورت دستی view را به کاربر نمایش می دهیم ممکن است مورد استفاده قرار بگیرد .
- متد  afterFilter :
بعد از فراخوانی تمامی اکشن های درخواست شده از کنترلر و پس از نمایش view به کاربر اجرا می شود .
کامپوننت های تعریف شده در بخش کنترلر نیز دارای متدهای callback خاص خودشان هستند که برای مطالعه بیشتر در این زمینه می توانید به این لینک مراجعه کنید .
Model
در این بخش به نسبت کنترلر ، متدهای callback کاربردی تری قرار گرفته که در هنگام ذخیره و بازیابی اطلاعات ، کار توسعه دهنده را بسیار راحت خواهد کرد ، به عنوان مثال ، تصور کنید که در حال توسعه یک سیستم بلاگ هستید و نیاز دارید که تاریخ انتشار پست را به صورت شمسی از کاربر دریافت و به صورت میلادی در پایگاه داده ذخیره کنید و مجددا هنگامی که اطلاعات پست را از پایگاه داده می خوانید تاریخ انتشار را به صورت شمسی به کاربر نمایش دهید، به نظرتان بهترین راه حل برای این کار چیست ؟
با استفاده از متدهای beforeSave و afterFind که در ادامه بررسی خواهیم کرد به سادگی می توانیم این کار را انجام دهیم .
- متد beforeFind
این متد قبل از فراخوانی هر متدی به منظور خواندن از پایگاه داده اجرا می شود و امضای آن به شکل زیر است :
beforeFind(mixed $queryData)
یک متغیر به عنوان پارامتر ورودی(queryData$) دریافت می کند که شامل اطلاعاتی از تنظیمات نهایی متد find ، مانند فیلدها ، شرط ها ، تعداد رکورد ها و … برای خواندن از پایگاه داده است که در زیر یک نمونه از محتویات آن را قرار داده ام :
array( 'conditions' => null, 'fields' => null, 'joins' => array(), 'limit' => (int) 20, 'offset' => null, 'order' => null, 'page' => (int) 1, 'group' => null, 'callbacks' => true, 'maxLimit' => (int) 20, 'paramType' => 'named' )
در صورتی که میخواهید متد find اجرا نشود می توانید مقدار false را برگردانید.
- متد afterFind
نتایج حاصل از اجرای متد find به این متد پاس داده می شود و در صورت نیاز می توان در داده ها تغییرات مورد نظرمان را انجام دهیم و سپس آن را بازگشت دهیم.
به عنوان مثال :
public function afterFind($results,$primary=false){
    foreach($results as $key => $val){
        if(isset($val['Post']['date'])){
            $results[$key]['Post']['date'] = date('Y/m/d',val['Post']['date']);
        }
    }
    return $results;
}
- متد beforeValidate
از این متد برای تغییر اطلاعات ارسال شده به Model  و یا تغییر قوانین اعتبار سنجی ، قبل از انجام عملیات اعتبارسنجی (Validates) استفاده می شود و مقدار بازگشتی آن باید true باشد تا متد save اجرا شود .
- متد beforeSave
قبل از ذخیره سازی اطلاعات اجرا می شود و به منظور انجام عملیات ذخیره سازی باید مقدار true بازگرداند در غیر این صورت عملیات ذخیره سازی متوقف می شود.
- متد afterSave
امضای این متد به صورت زیر است :
afterSave(boolean $created)
بعد از انجام عملیات ذخیره سازی فراخوانی می شود و در صورتی که موفقیت آمیز باشد پارامتر created$ مقدار true و در غیر این صورت مقدار flase خواهد داشت.
- متد beforeDelete
قبل از انجام عمل حذف فراخوانی می شود که امضای آن به صورت زیر است :
beforeDelete(boolean $cascade)
پارامتر وردی این متد cascade$ در صورتی که رکوردهای مربوط به این رکورد (رکوردهایی که به این رکورد وابسته هستند و با هم ارتباط دارند) هم پاک شوند مقدار true خواهد داشت همچنین توجه داشته باشید که برای انجام عملیات حذف این متد باید مقدار true بازگرداند .
- متد afterDelete
این متد نیز بعد از انجام عملیات حذف فراخوانی می گردد.
برای دریافت اطلاعات بیشتر در مورد این متد ها می توانید به این لینک مراجعه نمایید .
رفتار کننده ها (Behavior) تعریف شده در این بخش نیز دارای یکسری متدهای callback برای پیاده سازی هستند که در این لینک می توانید اطلاعاتی در مورد آنها کسب کنید .
در آخر هم باید بگم ، اگر سوال یا مشکلی در رابطه با کیک پی اچ پی دارید می توانید در انجمن فارسی کیک پی اچ پی مطرح کنید .
 
		موقع توسعه یک برنامه مسلما بارها پیش آمده که بخواهید برنامه ای که نوشتید را trace کنید و یا مقادیری که به صورت داینامیک داخل یک آرایه ذخیره کردید را مشاهده نمایید و کارهایی از این قبیل انجام دهید .
کیک پی اچ پی توابع و کلاس هایی را برای این کار در نظر گرفته که بسیار مفید و سودمند هستند و قطعا استفاده و به کاربردن انها کمک بسیاری در روند توسعه یک برنامه خواهد کرد.
مهم ترین نکته ای که باید به ان توجه داشت این هست که در تنظیمات کیک،که در آدرس Core/config.php قرار دارد ، مقدار debug برابر با ۲ باشد تا تمام خطاها و اشکالات برنامه ، کوئری هایی که اجرا می شوند و همچنین خروجی های توابع و کلاس های مربوط به debugging به صورت کامل هنگام اجرای برنامه به ما نمایش داده شود و cache های ایجاد شده رفرش گردند.
 Configure::write('debug', 2);
به این ویژگی دو مقدار ۰ و ۱ هم می توانیم اختصاص دهیم که مقدار ۱ مانند همان حالت مقدار ۲ هست اما محدودیتهایی دارد و مقدار ۰ برای زمانیست که برنامه ما به صورت کامل نوشته و تست شده و آماده ارائه به کاربران می باشد.
تابع debug
اولین و ساده ترین تابعی که کیک در اختیار ما قرار داده ، تابع debug هست ، که یک تابع سراسریست و در بخش های مختلف برنامه برای نمایش مقادیر متغیرها می توانیم از آن استفاده کنیم . prototype و یا امضای این تابع به صورت زیر هست :
debug(mixed $var, boolean $showHtml = null, $showFrom = true)
اولین پارامتر این تابع ، متغیری هست که قصد بررسی آن را داریم .
پارامتر showHtml به صورت boolean هست و به صورت پیش فرض مقدار true را دارد،اگر کدهای html در متغیر وجود داشته باشد به جای اجرا ، نمایش داده می شود و پارامتر سوم نیز که به صورت پیش فرض true ست نام فایل و خطی که تابع debug را فراخوانی کرده،در خروجی نمایش می دهد .
کلاس Debugger
کلاس کاربردی و مفیدی هست که از نسخه ۱٫۲ به بعد تعریف شده و متدهای مختلفی برای ارزیابی کدهایی که نوشتیم در اختیارمان قرار می دهد، که در زیر برخی از کاربردی ترین آنها را بررسی میکنیم.همچنین متدهای این کلاس به صورت استاتیک هستند و نیازی به نمونه سازی از کلاس نیست و به صورت زیر قابل دسترس هستند :
Debugger::methodName();
- متد dump
متغیری که به عنوان وررودی دریافت کرده است ، خیلی حرفه ای تر و واضح تر نسبت به تابع debug برایمان تشریح می کند .
//simple array $arr=array(1,2,3); Debugger::dump($arr); //outputs array( (int) 0 => (int) 1, (int) 1 => (int) 2, (int) 2 => (int) 3 )
- متد log
این متد تقریبا شبیه به متد dump هست اما با این تفاوت که خروجی خودش را به همراه یک سری اطلاعات مانند تاریخ و زمان اجرا ، stack trace اجرای برنامه تا خط مربوط به فراخوانی این متد را در شاخه tmp/logs در یک فایل متنی به نام debug ذخیره می کند . برای اجرای صحیح این متد دایرکتوری tmp/logs باید writable باشد .
- متد trace
با فراخوانی این متد در هر بخش از کدهای برنامه stack trace برنامه بازگردانده می شوده که می توانیم با استفاده از تابع print_r خود پی اچ پی و یا تابع pr که کیک برای چاپ آرایه ها به صورت خواناتر در اختیارمان قرار داده ، آن را در خروجی چاپ کنیم .
pr(Debugger::trace()); //outputs PostsController::index() - APP/Controller/DownloadsController.php, line 48 Dispatcher::_invoke() - CORE/lib/Cake/Routing/Dispatcher.php, line 265 Dispatcher::dispatch() - CORE/lib/Cake/Routing/Dispatcher.php, line 237 [main] - APP/webroot/index.php, line 84
- متد getType
این متد همانطور که از نامش پیداست نوع (type) متغیری که به آن پاس داده شده را بر می گرداند و در صورتی که یک شی (object) به عنوان ورودی به آن داده شود نام کلاس آن شی رادر اختیارمان قرار می دهد .
- متد excerpt
گاهی وقت ها شاید نیازمند این باشید که بخشی از کدهای هسته کیک را ببینید تا روند اجرای کدها را بهتر درک کنید . با استفاده از این متد می توان بخشی از کدهای یک فایل از هسته کیک را استخراج و بررسی کرد .
Debugger::excerpt($file, $line, $context)
اولین وردی آدرس فایلی است که قصد داریم بخشی از کدهای آن را بررسی کینم
دومین ورودی شماره خط شروع
و سومین پارامتر تعداد خطهایی که قصد داریم بازگردانده شوند (از صفر شروع می شود و نتیجه به صورت آرایه بازگردانده می شود)
pr(Debugger::excerpt(ROOT . DS . 'index.php', 1, 7));
برای اطلاعات بیشتر و مشاهده مثال های کاملتر در مورد این کلاس می توانید اینجا را مطالعه نمایید.
کلاس CakeLog
log کردن یکی از روش های مرسوم برای خطایابی و اشکال زدایی برنامه هست ، در کیک برای این منظور کلاس CakeLog در نظر گرفته شده که در ابتدا باید این کلاس را در برنامه بارگذاری و سپس با استفاده از متد write اقدام به نوشتن log مورد نظرمان کنیم .
//Config/bootstrap.php
App::uses('CakeLog', 'Log');
//Anywhere in your application
CakeLog::write('debug', 'successfully!!');
توجه داشته باشید که در ابتدای اجرای کیک فایل bootstarp.php اجرا می شود بنابراین محل مناسبی برای بارگذاری کلاس cakeLog هست تا در هر نقطه از برنامه بتوانیم از این کلاس استفاده کنیم همچنین همانطور که فبلا اشاره کردم فایل debug در شاخه tmp/logs قرار دارد .
Debug Kit
debug kit پلاگینی بی نظیر و حرفه ای برای اشکال زدایی application مان هست  و به نظرم باید ابزار همیشگی یک آشپز کیک پی اچ پی باشد .
این پلاگین اطلاعات سودمند و مفیدی همچون لیست کوئری های اجرا شده ، لیست request ها ، sesssion های ثبت شده ، لیست متغیرهای پاس داده شده به view و … در دسترس برنامه نویس قرار میدهد که مطئنا برای یک توسعه دهنده مفید خواهد بود .
از طریق لینک https://github.com/cakephp/debug_kit قابل دسترس هست.
برای نصب مراحل زیر را دنبال کنید :
- پس از دانلود ، پلاگین رو از حالت فشرده در بیارید و به DebugKit تغییر نام بدید.
- پلاگین رو به پوشه Plugin در برنامه تان منتقل کنید.
- در فایل bootstrap.php پلاگین را لود کنید .
CakePlugin::load('DebugKit');
- در فایل AppController.php به لیست کامپوننت ها toolbar پلاگین را اضافه کنید .
public $components = array('DebugKit.Toolbar');
- از داشتن یک تولبار حرفه ای در هنگام توسعه برنامه تان لذت ببرید … !
موفق و پیروز باشید …
منبع : http://book.cakephp.org/2.0/en/development/debugging.html
 
		یکی از امکانات جدید اضافه شده در نسخه ۲٫۲ از کیک پی اچ پی امکان تغییر قوانین تعریف شده در Model به صورت داینامیک از طریق متد validator که در Model پیاده سازی شده است می باشد. در این پست به بررسی این ویژگی جدید می پردازیم .
در ابتدای کار فرض می کنیم در model قوانین زیر رو تعریف کردیم :
class User extends AppModel{
	public $validate = array(
		'username'=>array(
			'rule-1'=>array(
				'rule'=>'notEmpty',
				'required'=>TRUE,
				'message'=>'لطفا نام کاربری خود را وارد کنید'
			),
			'rule-2'=>array(
				'rule'=>'isUnique',
				'message'=>'نام کاربری وارد شده تکراری است',
				'on'=>'create'
			),
		),
		'password'=>array(
			'rule'=>'notEmpty',
			'required'=>TRUE,
			'message'=>'لطفا رمزعبور خود را وارد کنید'
		),
	);
}
اضافه کردن قانون جدید :
برای اضافه کردن قانون جدید از متد add استفاده می کنیم
$this->validator()->add('password','rule-2',array(
		'rule'=>'alphaNumeric',
		'message'=>'رمزعبور تنها باید شامل حروف و اعداد باشد'	
));
همچنین می توانیم از روش method chaining استفاده کنیم و متد add رو چندین بار فراخوانی کنیم .
$this->validator()
	->add('password','rule-2',array(
		'rule'=>'alphaNumeric',
		'message'=>'رمزعبور تنها باید شامل حروف و اعداد باشد'
	))
	->add('password','rule-3',array(
		'rule'=>array('minLength',6)
		'message'=>'رمزعبور حداقل باید شامل ۶ کاراکتر باشد'
	));
به جای روش بالا می توانیم به صورت زیر هم عمل کنیم و قوانین جدید رو به صورت آرایه به عنوان پارامتر دوم به متد پاس بدیم
$this->validator()
	->add('password',array(
		'rule-2'=>array(
		'rule'=>'alphaNumeric',
		'message'=>'رمزعبور تنها باید شامل حروف و اعداد باشد'
		),
		'rule-3'=>array(
			'rule'=>array('minLength',6)
			'message'=>'رمزعبور حداقل باید شامل ۶ کاراکتر باشد'
		)
	));
ویرایش قوانین موجود :
برای مثال قانون rule-2 از فیلد password رو می خواهیم ویرایش کنیم
$this->validator()->getField('password')->setRule('rule-2',array(
		'rule'=>'numeric',
		'message'=>'رمزعبور باید تنها شامل اعداد باشد'
	)
);
و برای تغییر تمامی قوانین تعریف شده برای یک فیلد با استفاده از متد setRules داریم :
$this->validator()->getField('password')->setRules(array(
		'required'=>array(
			'rule'=>'notEmpty',
			'required'=>TRUE,
			'message'=>'رمزعبور خود را وارد کنید'
		),
		'length'=>array(
			'rule'=>array('between',6,12),
			'message'=>'رمزعبور باید شامل حداقل ۶ و حداکثر ۱۲ کاراکتر باشد'
		)
	)
);
همچنین اگر فقط بخوایم یک بخش از قانون تعریف شده رو تغییر بدیم :
$this->validator()->getField('password')->getRule('length')->message='رمزعبور وارد شده معتبر نیست';
حذف قوانین :
قطعه کد زیر قوانین تعریف شده برای فیلد password رو به طور کلی پاک میکنه .
$this->validator()->remove('password');
و کد زیر قانون length رو از بین قوانین تعریف شده برای فیلد password حذف میکنه
$this->validator()->remove('password','length');
اگر از کنترلر بخواهیم به این متد دسترسی داشته باشیم،برای مثال در کدهایی که توی این پست تعریف کردیم،به شکل زیر عمل می کنیم
$this->User->validator()->remove('password','length');
//other sample
$this->User->validator()->getField('password')->setRules(array(
		'required'=>array(
			'rule'=>'notEmpty',
			'required'=>TRUE,
			'message'=>'رمزعبور خود را وارد کنید'
		)
	)
);
امیدوارم این پست مفید بوده باشه ، موفق باشید .
 
		چند مدتی هست که در حال یادگیری توسعه برنامه ، تحت پلتفرم اندروید هستم و از اونجا که منابع فارسی در این زمینه خیلی کم ، محدود و اغلب تکراری هست ، تصمیم گرفتم تجربیات و آموخته هام رو با شما دوستان به اشتراک بزارم . همچنین به دلیل اینکه منابع آموزشی لازم برای شروع کار با اندورید و نصب ابزارهای لازم برای برنامه نویسی تحت این پلتفرم به زبان فارسی وجود داره و هدفم آموزش گام به گام نیست ، از ابتدا شروع به آموزش نکردم و تنها ابزار ها ، تکنیک ها و مواردی که به نظرم می تونه برای یک توسعه دهنده تازه کارِ اندروید مفید باشه رو معرفی میکنم که ADB هم یکی از اون ابزارها هست .
ADB یا Android Debug Bridge یک ابزار خط فرمان برای ارتباط و کنترل emulator و یا دستگاه اندرویدی متصل به سیستم ما هست و دستورات و فرمان های مفید و کاربردیِ مختلفی مانند نصب برنامه بر روی emulator ، دسترسی به فایل های موجود بر روی emulator و … رو در اختیار ما قرار میده که تعدادی از اونها رو با هم مرور میکنیم .
اگر کاربر ویندوز هستید ، برای اینکه به راحتی بتونید از adb در داخل cmd استفاده کنید آدرس دایرکتوری adb.exe رو که در شاخه SDK_Directory/platform_tools قرار داره ، در بخش environment variables ویندوز در انتهای متغیر path اضافه کنید و یا اینکه بعد از اجرای cmd به شاخه platform_tools بر روی سیستمتون برید و دستورات adb رو اجرا کنید .
adb devices
لیست emulator ها و دستگاه های اندرویدی در دسترس ، رو نمایش میده .
adb push <local path> <device path>
انتقال فایل از روی کامپیوتر به emulator یا دستگاه اندرویدی
adb pull <device path> <local path>
انتقال فایل از روی emulator یا دستگاه اندرویدی به کامپیوتر
adb install <apk file path>
نصب برنامه
adb uninstall <pakage name>
حذف برنامه
adb -s <serial-number> command
با استفاده از این دستور می تونیم  فرمان مورد نظرمون رو بر روی emulator یا دستگاه اندورویدی متصل به سیتسم مون اجرا کنیم .
برای مثال دستور adb -s emultaor-5554 shell خط فرمان emulator-5554 رو در اختیار ما قرار میده  و یا به عنوان مثال دستور adb -s emulator-5554 install androidapp.apk  برنامه androidapp رو بر روی emulator-5554 نصب میکنه.
در رابطه با بحث پایگاه داده ها ، اندروید از پایگاه داده کم حجم و در عین حال قوی SQLite پشتیبانی میکنه و از طریق خط فرمان adb و دسترسی به shell ایمولاتور و یا دستگاه اندرویدی که در حال تست گیری بر روی اون هستیم ، می تونیم به پایگاه داده ای که در برنامه مان ایجاد کردیم دسترسی داشته باشیم و ساختار و محتوای آن را بررسی کنیم ، این ابزار به این دلیل اهمیت داره که در اندروید پایگاه داده ای که ایجاد می کنیم به طور مستقیم قابل مشاهده و ویرایش نیست و باید از ابزارها و روش های جانبی برای دسترسی به اون استفاده کرد .
adb -s emulator-5554 shell
اول با دستور بالا به shell دسترسی پیدا میکنیم
sqlite3 /data/data/net.webnevis.example/database/database_name
و با استفاده از این دستور وارد خط فرمان sqlite می شیم و می تونیم دستورات مورد نظرمون رو اجرا کنیم . توجه داشته باشدی که به جای net.webnevis.example باید نام package برناموتون رو بنویسید و به جای databse_name نام پایگاه دادهای که ایجاد کردید .
برای مشاهده راهنمای دستوراتی که در این بخش می تونید استفاده کنید ، فرمان help. رو اجرا کنید.
توضیحاتی که در بالا خدمتتون عرض کردم تنها یک آشنایی اولیه با adb و امکاناتی که در اختیارمون قرار میده بود ، توصیه می کنم برای آشنایی کامل و دقیق مستندات اندروید که در آدرس developer.android.com/tools/help/adb.html قرار داره رو مطالعه کنید .
پی نوشت : برای دسترسی به مستندات اندروید باید از پروکسی استفاده کنید!!
