<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>وب نویس</title>
	<atom:link href="http://webnevis.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://webnevis.net</link>
	<description>وب نوشته های يك دانشجوی كامپیوتر</description>
	<lastBuildDate>Mon, 29 Aug 2016 18:56:58 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>پلاگین livereload در Gulp</title>
		<link>http://webnevis.net/1395/06/08/%d9%be%d9%84%d8%a7%da%af%db%8c%d9%86-livereload-%d8%af%d8%b1-gulp/</link>
		<comments>http://webnevis.net/1395/06/08/%d9%be%d9%84%d8%a7%da%af%db%8c%d9%86-livereload-%d8%af%d8%b1-gulp/#comments</comments>
		<pubDate>Mon, 29 Aug 2016 18:56:58 +0000</pubDate>
		<dc:creator>پیام</dc:creator>
				<category><![CDATA[دسته‌بندی نشده]]></category>
		<category><![CDATA[طراحی وب]]></category>
		<category><![CDATA[gulp]]></category>
		<category><![CDATA[gulpjs]]></category>
		<category><![CDATA[livereload]]></category>
		<category><![CDATA[گالپ]]></category>

		<guid isPermaLink="false">http://webnevis.net/?p=371</guid>
		<description><![CDATA[وقتی که در حال کد نویسی یک طرح وب سایت هستید بارها صفحه مرورگر رو رفرش می کنید تا تغییرات را مشاهده کنید و این کار ممکنه به یه عادت تکراری و خسته کننده براتون تبدیل شده باشه ! اگر از gulp استفاده می کنید برای توسعه frontend توصیه میکنم پلاگین livereload رو حتما نصب [...]]]></description>
				<content:encoded><![CDATA[<p>وقتی که در حال کد نویسی یک طرح وب سایت هستید بارها صفحه مرورگر رو رفرش می کنید تا تغییرات را مشاهده کنید و این کار ممکنه به یه عادت تکراری و خسته کننده براتون تبدیل شده باشه ! اگر از gulp استفاده می کنید برای توسعه frontend توصیه میکنم پلاگین livereload رو حتما نصب کنید تا خیلی سریع و بدون نیاز به رفرش دستی حاصل تغییرات کار خودتون رو روی مروگر مشاهده کنید.</p>
<p>خوب میریم سراغ نصب و استفاده از پلاگین Livereload در gulp.</p>
<p>قبل از اینکه تنظیمات گالپ رو انجام بدید برای اینکه پلاگین به صفحه وب شما متصل بشه و بتونه عملیات رفرش رو انجام بده نیاز دارید که اکستنشن مربوط به Livereload رو بر روی مرورگرتون نصب کنید، برای نصب به این <a href="http://livereload.com/extensions/" target="_blank">لینک </a>مراجعه کنید.</p>
<p><span id="more-371"></span></p>
<p>برای نصب پلاگین در گالپ دستور زیر رو تو محیط خط فرمان اجرا کنید تا پلاگین نصب بشه</p>
<pre class="brush:php">npm install --save-dev gulp-livereload</pre >
با اجرای کد بالا پلاگین Livereload نصب شده و همچنین در فایل package.json هم اضافه می شود.

حالا فایل gulpfile.js که تنظیمات مربوط به gulp در آن قرار داره رو باز کنید و دستورات زیر را وارد نمایید

<pre class="brush:php">

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']);
});

</pre>
<p>سپس از طریق خط فرمان به مسیر پروژه خودتون برید و دستور gulp رو اجرا کنید تا صفحه وب شما رفرش بشه و همچنین gulp فایل index.html رو زیر نظر میگیره و در صورتی که تغییری در این فایل ایجاد بشه مجددا صفحه رو رفرش میکنه.</p>
<p>صفحه وب تون را باز کنید و در نوار ابزار مرورگر بر روی ایکون مربوط به اکستنشن Livereload کلیک کنید تا به پلاگین livereload در گالپ متصل بشه و رفرش ها به درستی انجام بشه.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>موفق باشید</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://webnevis.net/1395/06/08/%d9%be%d9%84%d8%a7%da%af%db%8c%d9%86-livereload-%d8%af%d8%b1-gulp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>کیک پی اچ پی ۳ &#8211; شروع کار</title>
		<link>http://webnevis.net/1394/12/13/%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c-3-%d8%b4%d8%b1%d9%88%d8%b9-%da%a9%d8%a7%d8%b1/</link>
		<comments>http://webnevis.net/1394/12/13/%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c-3-%d8%b4%d8%b1%d9%88%d8%b9-%da%a9%d8%a7%d8%b1/#comments</comments>
		<pubDate>Thu, 03 Mar 2016 08:45:34 +0000</pubDate>
		<dc:creator>پیام</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[پی اچ پی - php]]></category>
		<category><![CDATA[کیک پی اچ پی - CakePHP]]></category>
		<category><![CDATA[cake php 3]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cakephp3]]></category>
		<category><![CDATA[آموزش کیک پی اچ پی]]></category>
		<category><![CDATA[فریم ورک کیک پی اچ پی]]></category>
		<category><![CDATA[کیک پی اچ پی]]></category>
		<category><![CDATA[کیک پی اچ پی 3]]></category>

		<guid isPermaLink="false">http://webnevis.net/?p=345</guid>
		<description><![CDATA[چند ماهی هست که نسخه جدید فریم ورک کیک پی اچ پی منتشر شده اما متاسفانه مطالب فارسی برای این نسخه وجود نداره و ندیدم هیچ وبلاگ یا سایتی در مورد این نسخه آموزشی گذاشته باشه، به همین خاطر تصمیم دارم تا جایی که می تونم و وقت وعلمم اجازه میده در مورد این نسخه [...]]]></description>
				<content:encoded><![CDATA[<p>چند ماهی هست که نسخه جدید فریم ورک کیک پی اچ پی منتشر شده اما متاسفانه مطالب فارسی برای این نسخه وجود نداره و ندیدم هیچ وبلاگ یا سایتی در مورد این نسخه آموزشی گذاشته باشه، به همین خاطر تصمیم دارم تا جایی که می تونم و وقت وعلمم اجازه میده در مورد این نسخه مطالبی رو بنویسم.</p>
<p>خوب واسه شروع میریم سراغ نصب این فریم ورک محبوب، برای راه اندازی کیک پی اچ پی ۳ شما نیاز به یک سری پیش نیازها دارید.</p>
<p>نسخه php وب سرور شما باید حداقل ۵٫۵٫۹ باشه و همچنین اکستنشن های mbstring و intl  برای php فعال باشند.</p>
<p>اگر از xampp یا wamp استفاده می کنید معمولا mbstring به صورت پیش فرض نصب هست اما intl رو باید فعال کنید.<br />
در xampp برای فعال کردن intl فایل تنظیمات php.ini رو باز کنید و به دنبال خط extension=php_intl.dll بگردید و این خط رو از حالت comment در بیارید (کاراکتر ; رو از ابتدای اون خط بردارید) و وب سرور رو راه اندازی مجدد کنید.<br />
برای wamp هم یک سری فایل با نام های icu*.dll  در مسیر  {C:\wamp\bin\php\php{version  وجود داره که باید یک کپی از این فایل ها رو در مسیر  C:\wamp\bin\apache\apache{version}\bin قرار بدید و بعد وب سرور رو restart کنید.</p>
<p>برای کار با دیتابیس های مختلف کیک از اکستنشن pdo استفاده میکنه پس حواستون باشه که این اکستنشن هم باید فعال باشه.</p>
<p><span id="more-345"></span></p>
<p>کیک پی اچ پی تو این نسخه پیشنهاد کرده که از ابزار composer که برای کنترل نیازمندیهای برنامه در php نسخه ۵٫۳ به بالا هست استفاده کنید(<a href="https://getcomposer.org/" target="_blank">اطلاعات بیشتر در سایت این ابزار</a>) .</p>
<p>برای نصب composer تو ویندوز، به راحتی میتونید از طریق فایل exe ای که در اختیارتون قرار میده، این ابزار رو نصب کنید .</p>
<p>حالا برای نصب cakephp به مسیر فایل اجرایی composer برید و دستور زیر رو اجرا کنید (مثلا فایل اجرایی کامپوزر تو سیستم من تو این آدرس هست C:\ProgramData\ComposerSetup\bin)</p>
<pre class="brush:php">php composer.phar create-project --prefer-dist cakephp/app my_app_name</pre>
<p>به جای my_app_name مسیر و نام پروژه تون رو بنویسید مثلا c:\xampp\htdocs\cakephp3_app .</p>
<p>پس از اجرای این دستور، composer شروع به دانلود کیک و همچنین کتابخونه های موردنیاز برای اجرای کیک میکنه و اون ها رو برای شما نصب میکنه و بسته به سرعت اینترنت شما ممکنه کمی طول بکشه . پس از اتمام این مرحله شما یک نسخه از فریم ورک cakephp رو در اختیار دارید و میتونید شروع به توسعه پروژه خود کنید.</p>
<p>همچنین برای اینکه هر بار برای ساخت پروژه جدید کیک و یا یه طور کلی کار با composer مجبور نباشید به مسیر نصب اون برید بهتر هست که فرمان composer رو به صورت سرتاسری تو سیستمتون تعریف کنید و تو هر جایی که میخواید پروژه جدید بسازید دستور زیر رو اجرا کنید</p>
<pre class="brush:php">composer create-project --prefer-dist cakephp/app my_app_name</pre>
<p>برای تعریف فرمان composer به صورت سرتاسری، تو ویندوز ۸٫۱ روی Mycomputer راست کلیک کنید و properties رو انتخاب کنید، تو پنجره باز شده از سمت چپ روی گزینه advanced system settings کلیک کنید و تو پنجره جدیدی که باز میشه در انتهای پنجره روی دکمه Environment Variables کلیک کنید و از بخش system variables گزینه path رو پیدا کنید و روی edit کلیک کنید، در انتهای مقدار این متغیر اگر ; وجود نداره یک ; بزارید و بعد مسیر فایل اجرایی کامپوزر (C:\ProgramData\ComposerSetup\bin) رو به اون اضافه کنید، دقت کنید آدرس هایی که تو این قسمت قرار دارند باید با ; از هم تفکیک شده باشند.</p>
<p>&nbsp;</p>
<p>تو پست های بعد سعی میکنم بیشتر در مورد نسخه ۳ فریم ورک cakephp بنویسیم، امیدوار این مطلب براتون مفید بوده باشه، موفق باشید</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://webnevis.net/1394/12/13/%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c-3-%d8%b4%d8%b1%d9%88%d8%b9-%da%a9%d8%a7%d8%b1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>رمزبان ، نگهبان رمزهای شما !</title>
		<link>http://webnevis.net/1393/02/31/%d8%b1%d9%85%d8%b2%d8%a8%d8%a7%d9%86-%d8%8c-%d9%86%da%af%d9%87%d8%a8%d8%a7%d9%86-%d8%b1%d9%85%d8%b2%d9%87%d8%a7%db%8c-%d8%b4%d9%85%d8%a7/</link>
		<comments>http://webnevis.net/1393/02/31/%d8%b1%d9%85%d8%b2%d8%a8%d8%a7%d9%86-%d8%8c-%d9%86%da%af%d9%87%d8%a8%d8%a7%d9%86-%d8%b1%d9%85%d8%b2%d9%87%d8%a7%db%8c-%d8%b4%d9%85%d8%a7/#comments</comments>
		<pubDate>Wed, 21 May 2014 12:19:26 +0000</pubDate>
		<dc:creator>پیام</dc:creator>
				<category><![CDATA[اندروید]]></category>
		<category><![CDATA[برنامه اندروید]]></category>

		<guid isPermaLink="false">http://webnevis.net/?p=335</guid>
		<description><![CDATA[خیلی وقت ها شده که به دلیل کثرت کارت های بانکی رمزعبور کارت هایی رو که خیلی وقت قبل تر استفاده کردید رو از یاد می برید و یا به اشتباه می افتید که کدوم رمز رو روی کارتتون گذاشتید ! و یا اینکه نیاز به اطلاعات حساب بانکی تون مثله شماره کارت،شماره حساب،رمز اینترنتی [...]]]></description>
				<content:encoded><![CDATA[<p>خیلی وقت ها شده که به دلیل کثرت کارت های بانکی رمزعبور کارت هایی رو که خیلی وقت قبل تر استفاده کردید رو از یاد می برید و یا به اشتباه می افتید که کدوم رمز رو روی کارتتون گذاشتید ! و یا اینکه نیاز به اطلاعات حساب بانکی تون مثله شماره کارت،شماره حساب،رمز اینترنتی و &#8230; دارید ویا مثلا تو شبکه های اجتماعی متفاوت عضو هستید و رمزهای مختلفی برای اکانت هاتون گذاشتید ، اینجاست که رمزبان به کمک شما میاد . رمزبان یک اپلیکیشن اندرویدی هست که به شما کمک می کنه تا با اطمینان خاطر رمز های عبور و اطلاعات شخصیتون رو به صورت محرمانه نگه داری کنید و به راحتی به آن ها دسترسی داشته باشید .</p>
<p>برای دریافت رمزبان از کافه بازار روی لینک زیر کلیک کنید :</p>
<p><a href="http://cafebazaar.ir/app/ir.payamsalami.ramzban/?l=fa" target="_blank">دریافت اپلیکیشن رمزبان از کافه بازار</a></p>
<p><em id="__mceDel"> </em></p>
]]></content:encoded>
			<wfw:commentRss>http://webnevis.net/1393/02/31/%d8%b1%d9%85%d8%b2%d8%a8%d8%a7%d9%86-%d8%8c-%d9%86%da%af%d9%87%d8%a8%d8%a7%d9%86-%d8%b1%d9%85%d8%b2%d9%87%d8%a7%db%8c-%d8%b4%d9%85%d8%a7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>برنامه نرخ روز برای اندروید</title>
		<link>http://webnevis.net/1392/09/01/%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d8%b1%d8%ae-%d8%b1%d9%88%d8%b2-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/</link>
		<comments>http://webnevis.net/1392/09/01/%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d8%b1%d8%ae-%d8%b1%d9%88%d8%b2-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/#comments</comments>
		<pubDate>Fri, 22 Nov 2013 12:33:04 +0000</pubDate>
		<dc:creator>پیام</dc:creator>
				<category><![CDATA[اندروید]]></category>
		<category><![CDATA[برنامه اندروید]]></category>
		<category><![CDATA[یادداشت ها]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android app]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[اپ موبایل]]></category>
		<category><![CDATA[برنامه]]></category>
		<category><![CDATA[برنامه موبایل]]></category>
		<category><![CDATA[نرخ روز]]></category>

		<guid isPermaLink="false">http://webnevis.net/?p=331</guid>
		<description><![CDATA[چند روزی قبل از اعزام به خدمت مقدس! سربازی تصمیم گرفتم که وقت آزادم رو برای نوشتن یک برنامه تحت سیستم عامل اندروید بزارم تا هم یک نمونه کار به کارهام اضافه بشه و هم اینکه تجربه بیشتری تو این زمینه پیدا کنم که در نهایت شروع به نوشتن یک برنامه در زمینه نمایش نرخ [...]]]></description>
				<content:encoded><![CDATA[<p>چند روزی قبل از اعزام به خدمت مقدس! سربازی تصمیم گرفتم که وقت آزادم رو برای نوشتن یک برنامه تحت سیستم عامل اندروید بزارم تا هم یک نمونه کار به کارهام اضافه بشه و هم اینکه تجربه بیشتری تو این زمینه پیدا کنم که در نهایت شروع به نوشتن یک برنامه در زمینه نمایش نرخ روز خودرو ، سکه ، طلا و ارز کردم و کم کم رو برنامه کار کردمُ توی آخرین مرخصی  کامل و آماده منتشر شدن شد و به پیشنهاد برادرم امیر اسمش رو نرخ روز گذاشتم.<br />
برای نمایش نرخ ها از سایت های معتبر دولتی و خبری استفاده شده به این صورت که سایت هایی که دارای فید rss بودن از فیدهاشون استفاده کردم و برای یک سری از سایت ها هم که فید نداشتند با استفاده از regex اطلاعات مورد نیاز رو استخراج کردم. به شخصه دوست داشتم روی رابط کاربری برنامه بیشتر کار کنم اما متاسفانه وقت زیادی نداشتم و دیدم اگر بخوام برنامه رو منتشر نکنم با این اوضاع تایمی که دارم چند ماهی عقب میفته و به همین خاطر برنامه رو برای مارکت های مختلف ایرانی فرستادم تا منتشر بشه.<br />
امیدوارم که برنامه ی مفیدی باشه .<br />
برای دریافت برنامه از کافه بازار روی <a href="http://cafebazaar.ir/app/ir.payamsalami.nerkherooz" target="_blank">این </a>لینک کلیک کنید.</p>
]]></content:encoded>
			<wfw:commentRss>http://webnevis.net/1392/09/01/%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d8%b1%d8%ae-%d8%b1%d9%88%d8%b2-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>نرم افزار دفترچه برای اندروید</title>
		<link>http://webnevis.net/1392/08/01/%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d8%af%d9%81%d8%aa%d8%b1%da%86%d9%87-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/</link>
		<comments>http://webnevis.net/1392/08/01/%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d8%af%d9%81%d8%aa%d8%b1%da%86%d9%87-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/#comments</comments>
		<pubDate>Wed, 23 Oct 2013 18:31:22 +0000</pubDate>
		<dc:creator>پیام</dc:creator>
				<category><![CDATA[اندروید]]></category>
		<category><![CDATA[برنامه اندروید]]></category>
		<category><![CDATA[یادداشت ها]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[برنامه دفترچه]]></category>
		<category><![CDATA[دفترچه]]></category>
		<category><![CDATA[نرم افزار اندروید]]></category>

		<guid isPermaLink="false">http://webnevis.net/?p=328</guid>
		<description><![CDATA[خیلی وقت بود که در زمینه برنامه نویسی اندروید مطالعه داشتم و برنامه هایی هم برای تست و یادگیری نوشته بودم اما متاسفانه فرصت نکرده بودم که یه برنامه کامل و مناسب که بشه منتشرش کرد رو آماده کنم ، به همین خاطر و برای شروع تصمیم گرفتم یه برنامه ساده و در عین حال [...]]]></description>
				<content:encoded><![CDATA[<p>خیلی وقت بود که در زمینه برنامه نویسی اندروید مطالعه داشتم و برنامه هایی هم برای تست و یادگیری نوشته بودم اما متاسفانه فرصت نکرده بودم که یه برنامه کامل و مناسب که بشه منتشرش کرد رو آماده کنم ، به همین خاطر و برای شروع تصمیم گرفتم یه برنامه ساده و در عین حال کاربردی رو با عنوان &#8220;دفترچه&#8221;  بنویسم تا هم شروعی باشه برای خودم و هم اینکه کاربران فارسی بتونن ازش استفاده کنند .<br />
با استفاده از این برنامه می تونید یادداشت هاتون رو ذخیره و مدیریت کنید و یا با دیگران به اشتراک بگذارید. همچنین در صورت تمایل می تونید برای برنامه رمزعبور تعیین کنید تا فقط خودتون به یادداشت ها دسترسی داشته باشید.<br />
این برنامه رو می تونید از مارکت ایرانی کندو <a href="http://cando.asr24.com/app.jsp?appId=1857019&amp;appname=%D8%AF%D9%81%D8%AA%D8%B1%DA%86%D9%87" target="_blank">دانلود </a>کنید و اگر انتقاد یا پیشنهادی دارید تو کامنت ها اعلام کنید .</p>
<p>امیدوارم که مفید واقع بشه &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://webnevis.net/1392/08/01/%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d8%af%d9%81%d8%aa%d8%b1%da%86%d9%87-%d8%a8%d8%b1%d8%a7%db%8c-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>نصب کیک پی اچ پی روی هاست</title>
		<link>http://webnevis.net/1392/06/30/%d9%86%d8%b5%d8%a8-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c-%d8%b1%d9%88%db%8c-%d9%87%d8%a7%d8%b3%d8%aa/</link>
		<comments>http://webnevis.net/1392/06/30/%d9%86%d8%b5%d8%a8-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c-%d8%b1%d9%88%db%8c-%d9%87%d8%a7%d8%b3%d8%aa/#comments</comments>
		<pubDate>Sat, 21 Sep 2013 17:32:07 +0000</pubDate>
		<dc:creator>پیام</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[پی اچ پی - php]]></category>
		<category><![CDATA[کیک پی اچ پی - CakePHP]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[آموزش کیک پی اچ پی]]></category>
		<category><![CDATA[فریم ورک کیک پی اچ پی]]></category>
		<category><![CDATA[پی اچ پی]]></category>
		<category><![CDATA[کیک پی اچ پی]]></category>

		<guid isPermaLink="false">http://webnevis.net/?p=322</guid>
		<description><![CDATA[روش مناسب برای نصب فریم ورک کیک  پی اچ پی روی هاست قرار دادن هسته کیک و برنامه ای که نوشتیم در پوشه ای خارج از فولدر public_html یا همون پوشه root سایت مون هست .برای این کار محتویات فولدر webroot رو در شاخه اصلی هاستمون باید قرار بدیم و در فایل index.php سه ثابت (define) [...]]]></description>
				<content:encoded><![CDATA[<p>روش مناسب برای نصب فریم ورک کیک  پی اچ پی روی هاست قرار دادن هسته کیک و برنامه ای که نوشتیم در پوشه ای خارج از فولدر public_html یا همون پوشه root سایت مون هست .برای این کار محتویات فولدر webroot رو در شاخه اصلی هاستمون باید قرار بدیم و در فایل index.php سه ثابت (define) با نام های ROOT ، APP_DIR و CAKE_CORE_INCLUDE_PATH رو مقداری دهی کنیم .</p>
<p>ثابت ROOT باید حاوی آدرس پوشه ای باشه که در برگیرنده برنامه ما هست .</p>
<p>ثابت APP_DIR تعیین کننده نام پوشه برنامه ما هست که به صورت پیش فرض این پوشه app نام داره و می تونیم تغییرش بدیم.</p>
<p>ثابت CAKE_CORE_INCLUDE_PATH هم باید شامل آدرس پوشه در برگیرنده هسته کیک باشه .</p>
<p>به عنوان مثال فرض کنید نام پوشه برنامه ای که نوشتیم ، webnevis_app هست و ما این پوشه رو در آدرس  home/payam/webnevis.net/adsmarket.ir/private قرار دادیم و همچنین هسته کیک (پوشه lib) رو هم در همین آدرس قرار دادیم بنابراین مقادیر این سه ثابت به شکل زیر خواهد بود :</p>
<pre class="brush:php">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');</pre>
<p>این روشی که با هم بررسی کردیم یکی از روش های نصب کیک هست ، برای اطلاعات بیشتر می تونید <a href="http://book.cakephp.org/2.0/en/installation.html" target="_blank">این </a>لینک رو مطالعه کنید.</p>
]]></content:encoded>
			<wfw:commentRss>http://webnevis.net/1392/06/30/%d9%86%d8%b5%d8%a8-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c-%d8%b1%d9%88%db%8c-%d9%87%d8%a7%d8%b3%d8%aa/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>متدهای callback در کیک پی اچ پی</title>
		<link>http://webnevis.net/1392/04/06/%d9%85%d8%aa%d8%af%d9%87%d8%a7%db%8c-callback-%d8%af%d8%b1-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c/</link>
		<comments>http://webnevis.net/1392/04/06/%d9%85%d8%aa%d8%af%d9%87%d8%a7%db%8c-callback-%d8%af%d8%b1-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c/#comments</comments>
		<pubDate>Thu, 27 Jun 2013 18:18:46 +0000</pubDate>
		<dc:creator>پیام</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[پی اچ پی - php]]></category>
		<category><![CDATA[کیک پی اچ پی - CakePHP]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[آموزش کیک پی اچ پی]]></category>
		<category><![CDATA[کیک پی اچ پی]]></category>

		<guid isPermaLink="false">http://webnevis.net/?p=313</guid>
		<description><![CDATA[اگر می خواهید قبل و یا بعد از فراخوانی یک فرآیند خاص مانند ذخیره کردن اطلاعات و یا نمایش اطلاعات به کاربر و کارهایی از این قبیل ، عمل خاصی را انجام دهید، راه حل پیش رو ، متدهای callback هستند . این متدها به صورت خودکار اجرا می شوند و در بخش های Controller [...]]]></description>
				<content:encoded><![CDATA[<p>اگر می خواهید قبل و یا بعد از فراخوانی یک فرآیند خاص مانند ذخیره کردن اطلاعات و یا نمایش اطلاعات به کاربر و کارهایی از این قبیل ، عمل خاصی را انجام دهید، راه حل پیش رو ، متدهای callback هستند . این متدها به صورت خودکار اجرا می شوند و در بخش های Controller و Model با توجه به نیازمان ، می توانیم آنها را تعریف کنیم .</p>
<p><strong>Controller</strong></p>
<p>- متد beforeFilter :<br />
یکی از مهم ترین متدهای موجود در این بخش  هست ، که قبل از اجرای هر اکشنی در کنترلر مربوطه فراخوانی می شود( حتی هنگامی که اکشن درخواست شده در کنترلر تعریف نشده باشد)  و بهترین مکان برای انجام کارهایی از قبیل اعتبارسنجی جلسه (session) کاربر ، چک کردن سطح دسترسی کاربر و &#8230; هست .</p>
<p>- متد beforeRender :<br />
این متد بعد از اجرای اکشن درخواست شده و قبل از نمایش view به کاربر ، اجرا می شود و آنچنان مورد استفاده ندارد ، اما گاهی وقت ها که نمایش خودکار(autoRender) در کنترلر را غیر فعال کرده ایم و با استفاده از متد render به صورت دستی view را به کاربر نمایش می دهیم ممکن است مورد استفاده قرار بگیرد .</p>
<p>- متد  afterFilter :<br />
بعد از فراخوانی تمامی اکشن های درخواست شده از کنترلر و پس از نمایش view به کاربر اجرا می شود .</p>
<p>کامپوننت های تعریف شده در بخش کنترلر نیز دارای متدهای callback خاص خودشان هستند که برای مطالعه بیشتر در این زمینه می توانید به این <a href="http://book.cakephp.org/2.0/en/controllers/components.html#callbacks" target="_blank">لینک </a>مراجعه کنید .</p>
<p><span id="more-313"></span></p>
<p><strong>Model</strong></p>
<p>در این بخش به نسبت کنترلر ، متدهای callback کاربردی تری قرار گرفته که در هنگام ذخیره و بازیابی اطلاعات ، کار توسعه دهنده را بسیار راحت خواهد کرد ، به عنوان مثال ، تصور کنید که در حال توسعه یک سیستم بلاگ هستید و نیاز دارید که تاریخ انتشار پست را به صورت شمسی از کاربر دریافت و به صورت میلادی در پایگاه داده ذخیره کنید و مجددا هنگامی که اطلاعات پست را از پایگاه داده می خوانید تاریخ انتشار را به صورت شمسی به کاربر نمایش دهید، به نظرتان بهترین راه حل برای این کار چیست ؟<br />
با استفاده از متدهای beforeSave و afterFind که در ادامه بررسی خواهیم کرد به سادگی می توانیم این کار را انجام دهیم .</p>
<p>- متد beforeFind<br />
این متد قبل از فراخوانی هر متدی به منظور خواندن از پایگاه داده اجرا می شود و امضای آن به شکل زیر است :</p>
<pre class="brush:php">beforeFind(mixed $queryData)</pre>
<p>یک متغیر به عنوان پارامتر ورودی(queryData$) دریافت می کند که شامل اطلاعاتی از تنظیمات نهایی متد find ، مانند فیلدها ، شرط ها ، تعداد رکورد ها و &#8230;  برای خواندن از پایگاه داده است که در زیر یک نمونه از محتویات آن را قرار داده ام :</p>
<pre class="brush:php">array(
	'conditions' =&gt; null,
	'fields' =&gt; null,
	'joins' =&gt; array(),
	'limit' =&gt; (int) 20,
	'offset' =&gt; null,
	'order' =&gt; null,
	'page' =&gt; (int) 1,
	'group' =&gt; null,
	'callbacks' =&gt; true,
	'maxLimit' =&gt; (int) 20,
	'paramType' =&gt; 'named'
)</pre>
<p>در صورتی که میخواهید متد find اجرا نشود می توانید مقدار false را برگردانید.</p>
<p>- متد afterFind<br />
نتایج حاصل از اجرای متد find به این متد پاس داده می شود و در صورت نیاز می توان در داده ها تغییرات مورد نظرمان را انجام دهیم و سپس آن را بازگشت دهیم.<br />
به عنوان مثال :</p>
<pre class="brush:php">public function afterFind($results,$primary=false){
    foreach($results as $key =&gt; $val){
        if(isset($val['Post']['date'])){
            $results[$key]['Post']['date'] = date('Y/m/d',val['Post']['date']);
        }
    }
    return $results;
}</pre>
<p>&nbsp;</p>
<p>- متد beforeValidate<br />
از این متد برای تغییر اطلاعات ارسال شده به Model  و یا تغییر قوانین اعتبار سنجی ، قبل از انجام عملیات اعتبارسنجی (Validates) استفاده می شود و مقدار بازگشتی آن باید true باشد تا متد save اجرا شود .</p>
<p>- متد beforeSave<br />
قبل از ذخیره سازی اطلاعات اجرا می شود و به منظور انجام عملیات ذخیره سازی باید مقدار true بازگرداند در غیر این صورت عملیات ذخیره سازی متوقف می شود.</p>
<p>- متد afterSave</p>
<p>امضای این متد به صورت زیر است :</p>
<pre class="brush:php">afterSave(boolean $created)</pre>
<p>بعد از انجام عملیات ذخیره سازی فراخوانی می شود و در صورتی که موفقیت آمیز باشد پارامتر created$ مقدار true  و در غیر این صورت مقدار flase خواهد داشت.</p>
<p>- متد beforeDelete<br />
قبل از انجام عمل حذف فراخوانی می شود که امضای آن به صورت زیر است :</p>
<pre class="brush:php">beforeDelete(boolean $cascade)</pre>
<p>پارامتر وردی این متد cascade$ در صورتی که رکوردهای مربوط به این رکورد (رکوردهایی که به این رکورد وابسته هستند و با هم ارتباط دارند) هم پاک شوند مقدار true خواهد داشت همچنین توجه داشته باشید که برای انجام عملیات حذف این متد باید مقدار true بازگرداند .</p>
<p>- متد afterDelete<br />
این متد نیز بعد از انجام عملیات حذف فراخوانی می گردد.</p>
<p>برای دریافت اطلاعات بیشتر در مورد این متد ها می توانید به این <a href="http://book.cakephp.org/2.0/en/models/callback-methods.html" target="_blank">لینک </a>مراجعه نمایید .<br />
رفتار کننده ها (Behavior) تعریف شده در این بخش نیز دارای یکسری متدهای callback برای پیاده سازی هستند که در این <a href="http://book.cakephp.org/2.0/en/models/behaviors.html#creating-a-behavior-callback" target="_blank">لینک </a>می توانید اطلاعاتی در مورد آنها کسب کنید .</p>
<p>در آخر هم باید بگم ، اگر سوال یا مشکلی در رابطه با <strong>کیک پی اچ پی </strong>دارید می توانید در <a href="http://www.cakephp.ir" target="_blank">انجمن فارسی کیک پی اچ پی</a> مطرح کنید .</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://webnevis.net/1392/04/06/%d9%85%d8%aa%d8%af%d9%87%d8%a7%db%8c-callback-%d8%af%d8%b1-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>اشکال زدایی برنامه در کیک پی اچ پی</title>
		<link>http://webnevis.net/1392/03/29/%d8%a7%d8%b4%da%a9%d8%a7%d9%84-%d8%b2%d8%af%d8%a7%db%8c%db%8c-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d8%af%d8%b1-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c/</link>
		<comments>http://webnevis.net/1392/03/29/%d8%a7%d8%b4%da%a9%d8%a7%d9%84-%d8%b2%d8%af%d8%a7%db%8c%db%8c-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d8%af%d8%b1-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c/#comments</comments>
		<pubDate>Tue, 18 Jun 2013 19:58:17 +0000</pubDate>
		<dc:creator>پیام</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[پی اچ پی - php]]></category>
		<category><![CDATA[کیک پی اچ پی - CakePHP]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[آموزش کیک پی اچ پی]]></category>
		<category><![CDATA[پی اچ پی]]></category>
		<category><![CDATA[کیک پی اچ پی]]></category>

		<guid isPermaLink="false">http://webnevis.net/?p=306</guid>
		<description><![CDATA[موقع توسعه یک برنامه مسلما بارها پیش آمده که بخواهید برنامه ای که نوشتید را trace کنید و یا مقادیری که به صورت داینامیک داخل یک آرایه ذخیره کردید را مشاهده نمایید و کارهایی از این قبیل انجام دهید . کیک پی اچ پی توابع و کلاس هایی را برای این کار در نظر گرفته [...]]]></description>
				<content:encoded><![CDATA[<p>موقع توسعه یک برنامه مسلما بارها پیش آمده که بخواهید برنامه ای که نوشتید را trace کنید و یا مقادیری که به صورت داینامیک داخل یک آرایه ذخیره کردید را مشاهده نمایید و کارهایی از این قبیل انجام دهید .<br />
کیک پی اچ پی توابع و کلاس هایی را برای این کار در نظر گرفته که بسیار مفید و سودمند هستند و قطعا استفاده و به کاربردن انها کمک بسیاری در روند توسعه یک برنامه خواهد کرد.</p>
<p>مهم ترین نکته ای که باید به ان توجه داشت این هست که در تنظیمات کیک،که در آدرس Core/config.php قرار دارد ، مقدار debug برابر با ۲ باشد تا تمام خطاها و اشکالات برنامه ، کوئری هایی که اجرا می شوند و همچنین خروجی های توابع و کلاس های مربوط به debugging به صورت کامل هنگام اجرای برنامه به ما نمایش داده شود و cache های ایجاد شده رفرش گردند.</p>
<pre class="brush:php"> Configure::write('debug', 2);</pre>
<p>به این ویژگی دو مقدار ۰ و ۱ هم می توانیم اختصاص دهیم که مقدار ۱ مانند همان حالت مقدار ۲ هست اما محدودیتهایی دارد و مقدار ۰ برای زمانیست که برنامه ما به صورت کامل نوشته و تست شده و آماده ارائه به کاربران می باشد.</p>
<p><span id="more-306"></span></p>
<p><strong>تابع debug</strong><br />
اولین و ساده ترین تابعی که کیک در اختیار ما قرار داده ، تابع debug هست ، که یک تابع سراسریست و در بخش های مختلف برنامه برای نمایش مقادیر متغیرها می توانیم از آن استفاده کنیم . prototype و یا امضای این تابع به صورت زیر هست :</p>
<pre class="brush:php">debug(mixed $var, boolean $showHtml = null, $showFrom = true)</pre>
<p>اولین پارامتر این تابع ، متغیری هست که قصد بررسی آن را داریم .<br />
پارامتر showHtml به صورت boolean هست و به صورت پیش فرض مقدار true را دارد،اگر کدهای html در متغیر وجود داشته باشد به جای اجرا ، نمایش داده می شود و پارامتر سوم نیز که به صورت پیش فرض true ست نام فایل و خطی که تابع debug را فراخوانی کرده،در خروجی نمایش می دهد .</p>
<p><strong>کلاس Debugger</strong></p>
<p>کلاس کاربردی و مفیدی هست که از نسخه ۱٫۲ به بعد تعریف شده و متدهای مختلفی برای ارزیابی کدهایی که نوشتیم در اختیارمان قرار می دهد، که در زیر برخی از کاربردی ترین آنها را بررسی میکنیم.همچنین متدهای این کلاس به صورت استاتیک هستند و نیازی به نمونه سازی از کلاس نیست و به صورت زیر قابل دسترس هستند :</p>
<pre class="brush:php"> Debugger::methodName();</pre>
<p>- متد dump<br />
متغیری که به عنوان وررودی دریافت کرده است ، خیلی حرفه ای تر و واضح تر نسبت به تابع debug برایمان تشریح می کند .</p>
<pre class="brush:php">//simple array
$arr=array(1,2,3);
Debugger::dump($arr);

//outputs
array(
	(int) 0 =&gt; (int) 1,
	(int) 1 =&gt; (int) 2,
	(int) 2 =&gt; (int) 3
)</pre>
<p>- متد log<br />
این متد تقریبا شبیه به متد dump هست اما با این تفاوت که خروجی خودش را به همراه یک سری اطلاعات مانند تاریخ و زمان اجرا ، stack trace اجرای برنامه تا خط مربوط به فراخوانی این متد را در شاخه tmp/logs در یک فایل متنی به نام debug ذخیره می کند . برای اجرای صحیح این متد دایرکتوری tmp/logs باید writable باشد .</p>
<p>- متد trace<br />
با فراخوانی این متد در هر بخش از کدهای برنامه stack trace برنامه بازگردانده می شوده که می توانیم با استفاده از تابع print_r خود پی اچ پی و یا تابع pr که کیک برای چاپ آرایه ها به صورت خواناتر در اختیارمان قرار داده ، آن را در خروجی چاپ کنیم .</p>
<pre class="brush:php">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</pre>
<p>- متد getType<br />
این متد همانطور که از نامش پیداست نوع (type) متغیری که به آن پاس داده شده را بر می گرداند و در صورتی که یک شی (object) به عنوان ورودی به آن داده شود نام کلاس آن شی رادر اختیارمان قرار می دهد .</p>
<p>- متد excerpt<br />
گاهی وقت ها شاید نیازمند این باشید که بخشی از کدهای هسته کیک را ببینید تا روند اجرای کدها را بهتر درک کنید . با استفاده از این متد می توان بخشی از کدهای یک فایل از هسته کیک را استخراج و بررسی کرد .</p>
<pre class="brush:php">Debugger::excerpt($file, $line, $context)</pre>
<p>اولین وردی آدرس فایلی است که قصد داریم بخشی از کدهای آن را بررسی کینم<br />
دومین ورودی شماره خط شروع<br />
و سومین پارامتر تعداد خطهایی که قصد داریم بازگردانده شوند (از صفر شروع می شود و نتیجه به صورت آرایه بازگردانده می شود)</p>
<pre class="brush:php">pr(Debugger::excerpt(ROOT . DS . 'index.php', 1, 7));</pre>
<p>برای اطلاعات بیشتر و مشاهده مثال های کاملتر در مورد این کلاس می توانید <a href="http://book.cakephp.org/2.0/en/development/debugging.html#using-the-debugger-class" target="_blank">اینجا </a>را مطالعه نمایید.</p>
<p>&nbsp;</p>
<p><strong>کلاس CakeLog </strong></p>
<p>log کردن یکی از روش های مرسوم برای خطایابی و اشکال زدایی برنامه هست ، در کیک برای این منظور کلاس CakeLog در نظر گرفته شده که در ابتدا باید این کلاس را در برنامه بارگذاری و سپس با استفاده از متد write اقدام به نوشتن log مورد نظرمان کنیم .</p>
<pre class="brush:php">//Config/bootstrap.php
App::uses('CakeLog', 'Log');

//Anywhere in your application
CakeLog::write('debug', 'successfully!!');</pre>
<p>توجه داشته باشید که در ابتدای اجرای کیک فایل bootstarp.php اجرا می شود بنابراین محل مناسبی برای بارگذاری کلاس cakeLog هست تا در هر نقطه از برنامه بتوانیم از این کلاس استفاده کنیم همچنین همانطور که فبلا اشاره کردم فایل debug در شاخه tmp/logs قرار دارد .</p>
<p>&nbsp;</p>
<p><strong>Debug Kit<br />
</strong></p>
<p>debug kit پلاگینی بی نظیر و حرفه ای برای اشکال زدایی application مان هست  و به نظرم باید ابزار همیشگی یک آشپز کیک پی اچ پی باشد .<br />
این پلاگین اطلاعات سودمند و مفیدی همچون لیست کوئری های اجرا شده ، لیست request ها ، sesssion های ثبت شده ، لیست متغیرهای پاس داده شده به view و &#8230; در دسترس برنامه نویس قرار میدهد که مطئنا برای یک توسعه دهنده مفید خواهد بود .<br />
از طریق لینک <a href="https://github.com/cakephp/debug_kit">https://github.com/cakephp/debug_kit</a> قابل دسترس هست.<br />
برای نصب مراحل زیر را دنبال کنید :<br />
- پس از دانلود ، پلاگین رو از حالت فشرده در بیارید و به DebugKit تغییر نام بدید.<br />
- پلاگین رو به پوشه Plugin در برنامه تان منتقل کنید.<br />
- در فایل bootstrap.php پلاگین را لود کنید .</p>
<pre class="brush:php">CakePlugin::load('DebugKit');</pre>
<p>- در فایل AppController.php به لیست کامپوننت ها toolbar پلاگین را اضافه کنید .</p>
<pre class="brush:php">public $components = array('DebugKit.Toolbar');</pre>
<p>- از داشتن یک تولبار حرفه ای در هنگام توسعه برنامه تان لذت ببرید &#8230; !</p>
<p>&nbsp;</p>
<p>موفق و پیروز باشید &#8230;</p>
<p>&nbsp;</p>
<p>منبع : <a href="http://book.cakephp.org/2.0/en/development/debugging.html" target="_blank">http://book.cakephp.org/2.0/en/development/debugging.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://webnevis.net/1392/03/29/%d8%a7%d8%b4%da%a9%d8%a7%d9%84-%d8%b2%d8%af%d8%a7%db%8c%db%8c-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d8%af%d8%b1-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>تغییر قوانین اعتبارسنجی به صورت پویا در کیک پی اچ پی</title>
		<link>http://webnevis.net/1392/03/27/%d8%aa%d8%ba%db%8c%db%8c%d8%b1-%d9%82%d9%88%d8%a7%d9%86%db%8c%d9%86-%d8%a7%d8%b9%d8%aa%d8%a8%d8%a7%d8%b1%d8%b3%d9%86%d8%ac%db%8c-%d8%af%d8%b1-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c/</link>
		<comments>http://webnevis.net/1392/03/27/%d8%aa%d8%ba%db%8c%db%8c%d8%b1-%d9%82%d9%88%d8%a7%d9%86%db%8c%d9%86-%d8%a7%d8%b9%d8%aa%d8%a8%d8%a7%d8%b1%d8%b3%d9%86%d8%ac%db%8c-%d8%af%d8%b1-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c/#comments</comments>
		<pubDate>Mon, 17 Jun 2013 16:59:29 +0000</pubDate>
		<dc:creator>پیام</dc:creator>
				<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[پی اچ پی - php]]></category>
		<category><![CDATA[کیک پی اچ پی - CakePHP]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[آموزش php]]></category>
		<category><![CDATA[آموزش کیک پی اچ پی]]></category>
		<category><![CDATA[پی اچ پی]]></category>
		<category><![CDATA[کیک پی اچ پی]]></category>

		<guid isPermaLink="false">http://webnevis.net/?p=300</guid>
		<description><![CDATA[یکی از امکانات جدید اضافه شده در نسخه ۲٫۲ از کیک پی اچ پی امکان تغییر قوانین تعریف شده در Model به صورت داینامیک از طریق متد validator که در Model پیاده سازی شده است می باشد. در این پست به بررسی این ویژگی جدید می پردازیم . در ابتدای کار فرض می کنیم در [...]]]></description>
				<content:encoded><![CDATA[<p>یکی از امکانات جدید اضافه شده در نسخه ۲٫۲ از کیک پی اچ پی امکان تغییر قوانین تعریف شده در Model به صورت داینامیک از طریق متد validator که در Model پیاده سازی شده است می باشد. در این پست به بررسی این ویژگی جدید می پردازیم .</p>
<p>در ابتدای کار فرض می کنیم در model قوانین زیر رو تعریف کردیم :</p>
<pre class="brush:php">class User extends AppModel{

	public $validate = array(
		'username'=&gt;array(
			'rule-1'=&gt;array(
				'rule'=&gt;'notEmpty',
				'required'=&gt;TRUE,
				'message'=&gt;'لطفا نام کاربری خود را وارد کنید'
			),
			'rule-2'=&gt;array(
				'rule'=&gt;'isUnique',
				'message'=&gt;'نام کاربری وارد شده تکراری است',
				'on'=&gt;'create'
			),
		),
		'password'=&gt;array(
			'rule'=&gt;'notEmpty',
			'required'=&gt;TRUE,
			'message'=&gt;'لطفا رمزعبور خود را وارد کنید'
		),
	);

}</pre>
<p><span id="more-300"></span></p>
<p><strong>اضافه کردن قانون جدید :</strong><br />
برای اضافه کردن قانون جدید از متد add استفاده می کنیم</p>
<pre class="brush:php">$this-&gt;validator()-&gt;add('password','rule-2',array(
		'rule'=&gt;'alphaNumeric',
		'message'=&gt;'رمزعبور تنها باید شامل حروف و اعداد باشد'	
));</pre>
<p>همچنین می توانیم از روش method chaining استفاده کنیم و متد add رو چندین بار فراخوانی کنیم .</p>
<pre class="brush:php">$this-&gt;validator()
	-&gt;add('password','rule-2',array(
		'rule'=&gt;'alphaNumeric',
		'message'=&gt;'رمزعبور تنها باید شامل حروف و اعداد باشد'
	))
	-&gt;add('password','rule-3',array(
		'rule'=&gt;array('minLength',6)
		'message'=&gt;'رمزعبور حداقل باید شامل ۶ کاراکتر باشد'
	));</pre>
<p>به جای روش بالا می توانیم به صورت زیر هم عمل کنیم و قوانین جدید رو به صورت آرایه به عنوان پارامتر دوم به متد پاس بدیم</p>
<pre class="brush:php">$this-&gt;validator()
	-&gt;add('password',array(
		'rule-2'=&gt;array(
		'rule'=&gt;'alphaNumeric',
		'message'=&gt;'رمزعبور تنها باید شامل حروف و اعداد باشد'
		),
		'rule-3'=&gt;array(
			'rule'=&gt;array('minLength',6)
			'message'=&gt;'رمزعبور حداقل باید شامل ۶ کاراکتر باشد'
		)
	));</pre>
<p><strong>ویرایش قوانین موجود :</strong></p>
<p>برای مثال قانون rule-2 از فیلد password  رو می خواهیم ویرایش کنیم</p>
<pre class="brush:php">$this-&gt;validator()-&gt;getField('password')-&gt;setRule('rule-2',array(
		'rule'=&gt;'numeric',
		'message'=&gt;'رمزعبور باید تنها شامل اعداد باشد'
	)
);</pre>
<p>و برای تغییر تمامی قوانین تعریف شده برای یک فیلد با استفاده از متد setRules داریم :</p>
<pre class="brush:php">$this-&gt;validator()-&gt;getField('password')-&gt;setRules(array(
		'required'=&gt;array(
			'rule'=&gt;'notEmpty',
			'required'=&gt;TRUE,
			'message'=&gt;'رمزعبور خود را وارد کنید'
		),
		'length'=&gt;array(
			'rule'=&gt;array('between',6,12),
			'message'=&gt;'رمزعبور باید شامل حداقل ۶ و حداکثر ۱۲ کاراکتر باشد'
		)
	)
);</pre>
<p>همچنین اگر فقط بخوایم یک بخش از قانون تعریف شده رو تغییر بدیم :</p>
<pre class="brush:php">$this-&gt;validator()-&gt;getField('password')-&gt;getRule('length')-&gt;message='رمزعبور وارد شده معتبر نیست';</pre>
<p><strong>حذف قوانین :</strong></p>
<p>قطعه کد زیر قوانین تعریف شده برای فیلد password رو به طور کلی پاک میکنه .</p>
<pre class="brush:php">$this-&gt;validator()-&gt;remove('password');</pre>
<p>و کد زیر قانون length رو از بین قوانین تعریف شده برای فیلد password حذف میکنه</p>
<pre class="brush:php">$this-&gt;validator()-&gt;remove('password','length');</pre>
<p>اگر از کنترلر بخواهیم به این متد دسترسی داشته باشیم،برای مثال در کدهایی که توی این پست تعریف کردیم،به شکل زیر عمل می کنیم</p>
<pre class="brush:php">$this-&gt;User-&gt;validator()-&gt;remove('password','length');

//other sample
$this-&gt;User-&gt;validator()-&gt;getField('password')-&gt;setRules(array(
		'required'=&gt;array(
			'rule'=&gt;'notEmpty',
			'required'=&gt;TRUE,
			'message'=&gt;'رمزعبور خود را وارد کنید'
		)
	)
);</pre>
<p>امیدوارم این پست مفید بوده باشه ، موفق باشید .</p>
]]></content:encoded>
			<wfw:commentRss>http://webnevis.net/1392/03/27/%d8%aa%d8%ba%db%8c%db%8c%d8%b1-%d9%82%d9%88%d8%a7%d9%86%db%8c%d9%86-%d8%a7%d8%b9%d8%aa%d8%a8%d8%a7%d8%b1%d8%b3%d9%86%d8%ac%db%8c-%d8%af%d8%b1-%da%a9%db%8c%da%a9-%d9%be%db%8c-%d8%a7%da%86-%d9%be%db%8c/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ابزار ADB در اندروید</title>
		<link>http://webnevis.net/1392/03/14/%d8%a7%d8%a8%d8%b2%d8%a7%d8%b1-adb-%d8%af%d8%b1-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/</link>
		<comments>http://webnevis.net/1392/03/14/%d8%a7%d8%a8%d8%b2%d8%a7%d8%b1-adb-%d8%af%d8%b1-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/#comments</comments>
		<pubDate>Tue, 04 Jun 2013 11:22:49 +0000</pubDate>
		<dc:creator>پیام</dc:creator>
				<category><![CDATA[اندروید]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[آموزش اندروید]]></category>
		<category><![CDATA[ابزار adb در اندروید]]></category>
		<category><![CDATA[برنامه نویسی]]></category>
		<category><![CDATA[برنامه نویسی موبایل]]></category>

		<guid isPermaLink="false">http://webnevis.net/?p=281</guid>
		<description><![CDATA[چند مدتی هست که در حال یادگیری توسعه برنامه ، تحت پلتفرم اندروید هستم و از اونجا که منابع فارسی در این زمینه خیلی کم ، محدود و اغلب تکراری هست ، تصمیم گرفتم تجربیات و آموخته هام رو با شما دوستان به اشتراک بزارم  . همچنین به دلیل اینکه منابع آموزشی لازم برای شروع کار [...]]]></description>
				<content:encoded><![CDATA[<p>چند مدتی هست که در حال یادگیری توسعه برنامه ، تحت پلتفرم اندروید هستم و از اونجا که منابع فارسی در این زمینه خیلی کم ، محدود و اغلب تکراری هست ، تصمیم گرفتم تجربیات و آموخته هام رو با شما دوستان به اشتراک بزارم  . همچنین به دلیل اینکه منابع آموزشی لازم برای شروع کار با اندورید و نصب ابزارهای لازم برای برنامه نویسی تحت این پلتفرم به زبان فارسی وجود داره و هدفم آموزش گام به گام نیست ، از ابتدا شروع به آموزش نکردم و تنها ابزار ها ، تکنیک ها و مواردی که به نظرم می تونه برای یک توسعه دهنده تازه کارِ اندروید مفید باشه رو معرفی میکنم که ADB هم یکی از اون ابزارها هست .</p>
<p>ADB یا Android Debug Bridge  یک ابزار خط فرمان برای ارتباط و کنترل emulator و یا دستگاه اندرویدی متصل به سیستم ما هست و دستورات و فرمان های مفید و کاربردیِ مختلفی مانند نصب برنامه بر روی emulator ، دسترسی به فایل های موجود بر روی emulator و &#8230; رو در اختیار ما قرار میده  که تعدادی از اونها رو با هم مرور میکنیم .</p>
<p>اگر کاربر ویندوز هستید ، برای اینکه به راحتی بتونید از adb در داخل cmd استفاده کنید آدرس دایرکتوری adb.exe رو که در شاخه SDK_Directory/platform_tools قرار داره ، در بخش environment variables ویندوز در انتهای متغیر path اضافه کنید و یا اینکه بعد از اجرای cmd به شاخه platform_tools بر روی سیستمتون برید و دستورات adb رو اجرا کنید .</p>
<p style="text-align: left;">adb devices</p>
<p>لیست emulator ها و دستگاه های اندرویدی در دسترس ، رو نمایش میده  .</p>
<p>&nbsp;</p>
<p><span id="more-281"></span></p>
<p style="text-align: left; direction: ltr;">adb push &lt;local path&gt; &lt;device path&gt;</p>
<p style="text-align: right;">انتقال فایل از روی کامپیوتر به emulator یا دستگاه اندرویدی</p>
<p style="text-align: left; direction: ltr;">adb pull &lt;device path&gt; &lt;local path&gt;</p>
<p style="text-align: right;">انتقال فایل از روی emulator یا دستگاه اندرویدی به کامپیوتر</p>
<p style="text-align: left; direction: ltr;">adb install &lt;apk file path&gt;</p>
<p style="text-align: right;">نصب برنامه</p>
<p style="text-align: left; direction: ltr;">adb uninstall &lt;pakage name&gt;</p>
<p style="text-align: right;">حذف برنامه</p>
<p style="text-align: left;">adb -s &lt;serial-number&gt; command</p>
<p>با استفاده از این دستور می تونیم  فرمان مورد نظرمون رو بر روی emulator یا دستگاه اندورویدی متصل به سیتسم مون اجرا کنیم .<br />
برای مثال دستور adb -s emultaor-5554 shell خط فرمان emulator-5554 رو در اختیار ما قرار میده  و یا به عنوان مثال دستور adb -s emulator-5554 install androidapp.apk  برنامه androidapp رو بر روی emulator-5554 نصب میکنه.</p>
<p>در رابطه با بحث پایگاه داده ها ، اندروید از پایگاه داده کم حجم و در عین حال قوی SQLite پشتیبانی میکنه و از طریق خط فرمان adb  و دسترسی به shell ایمولاتور و یا دستگاه اندرویدی که در حال تست گیری بر روی اون هستیم ، می تونیم به پایگاه داده ای که در برنامه مان ایجاد کردیم دسترسی داشته باشیم  و ساختار و محتوای آن را بررسی کنیم ، این ابزار به این دلیل اهمیت داره که در اندروید  پایگاه داده ای که ایجاد می کنیم به طور مستقیم قابل مشاهده و ویرایش نیست و باید از ابزارها و روش های جانبی برای دسترسی  به اون استفاده کرد .</p>
<p style="text-align: left;">adb -s emulator-5554 shell</p>
<p style="text-align: right;">اول با دستور بالا به shell دسترسی پیدا میکنیم</p>
<p style="text-align: left; direction: ltr;">sqlite3  /data/data/net.webnevis.example/database/database_name</p>
<p style="text-align: right;">و با استفاده از این دستور وارد خط فرمان sqlite می شیم و می تونیم دستورات مورد نظرمون رو اجرا کنیم . توجه داشته باشدی که به جای net.webnevis.example باید نام package برناموتون رو بنویسید و به جای databse_name نام پایگاه دادهای که ایجاد کردید .<br />
برای مشاهده راهنمای دستوراتی که در این بخش می تونید استفاده کنید ، فرمان help. رو اجرا کنید.</p>
<p style="text-align: right;">توضیحاتی که در بالا خدمتتون عرض کردم تنها یک آشنایی اولیه با adb و امکاناتی که در اختیارمون قرار میده بود ، توصیه می کنم برای آشنایی کامل و دقیق مستندات اندروید که در آدرس  <a href="http://developer.android.com/tools/help/adb.html" target="_blank">developer.android.com/tools/help/adb.html</a> قرار داره رو مطالعه کنید .</p>
<p style="text-align: right;">پی نوشت : برای دسترسی به مستندات اندروید باید از پروکسی استفاده کنید!!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://webnevis.net/1392/03/14/%d8%a7%d8%a8%d8%b2%d8%a7%d8%b1-adb-%d8%af%d8%b1-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
