استاندارد PSR-1 در PHP

نوشته‌شده در توسط .
php standards

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

تو زبان PHP یسری استاندار تعریف شده که امروزه همه برنامه نویسای خوب PHP رعایتش میکنن، این میتونه برای همه خوب باشه… هم کسی که کد مینویسه و هم کسی که کد میخونه.

استانداردی که تو این پست میخام بصورت خلاصه در موردش حرف بزنم PSR-1 هست که اشاره میکنه استاندارد های پایه ی کد نویسی در PHP.

 

تو PHP چند روش برای باز کردن کد PHP و بستن اون وجود داره ولی این استاندارد میگه که از این روش استفاده کنید :‌ <?php ?> یا از نوع کوتاهش به این صورت :‌  <? =?>

کاراکتر انکودینگی که استفاده میشه باید UTF-8  باشه و بدون BOM .

نکته ی دیگه ای که خیلی مهمه اینه که اجرای منطق برنامه با include  و تعریف کردن تابع و… یک جا نباشن، یعنی مثلا شما اگه دارید یه فانکش تعریف میکنید بالاش مثلا echo  نکنید. این مثالی که در زیر اومده یه نمونه غلط طبق این استاندارد هست :

ولی در مثال زیر استاندار PSR-1 بخوبی رعایت شده :

namespace ها و نام کلاس ها

هر کلاس باید توی یه فایل نوشته بشه و مثلا وسط کد کلاس تعریف نکنید و یا مثلا دو تا کلاس رو توی یه فایل ننویسید. اسم کلاس ها باید بصورت  StudlyCaps باشه که مشخصه ینی چجوری…

برای ورژن ۵٫۳ به بعد از روش رسمی فضای نام ها استفاده کنید، برای مثال :‌

ولی برای ورژن های قبل که از این قابلیت پشتیبانی نمیکنن از  pseudo-namespacing استفاده کنید که یه پیشوند  Vendor_ به اسم کلاسها اضافه میشه و sub namespace ها بعد از اون نوشته میشن و در نهایت نام کلاس نوشته میشه :

ثابت ها در کلاس ها 

ثابت ها در کلاسها طبق این استاندارد باید با حروف بزرگ تعریف بشن و برای جدا کردن از underscore استفاده کنید. یچیزی مثل کد زیر :

در مورد پراپرتی ها در کلاس ها دستور خاصی گفته نشده ولی کلاس ها باید بصورت  camelCase()  تعریف بشن.

همین روزا بقیه استاندارا رم میتویسم واستون که بخونیم و رعایت کنیم. مرسی 🙂

 

آدرس لایسنس سرور phpstorm :)

نوشته‌شده در توسط .
phpstorm licence server

همون طور که از خنده ملیح عنوان نوشته مشخصه این کار کاره زشتیه ولی خب ماها که پول نداریم phpstorm بخریم میتونیم آدرس لایسنس سرور هایی که واسمون کار میکنن رو اینجا تو کامنتا بذاریم تا بقیه هم استفاده کنن…

الان این برای من در ورژن ۲۰۱۸٫۱٫۴  کار کرد : http://wolf.3dxtras.com  ولی خب هر روز یسری احتمالا بسته میشن و ما اینجا جدیدترین هارو منتشر میکنیم تا همنوع هامون(که پول ندارن) استفاده کنن، شما هم اگه مث ما هستید آدرسی که احتمالا پیدا کردید رو توی کامنت ها بفرستید.

مرسی 🙂

 

آدرس های جدیدی که در کامنت ها منتشر میشن رو اینجا آپدیت میکنم تا مجبور نشید اسکرول کنید تا اون پایین :

  • http://www.activejetbrains.gq
  • http://hb5.s.osidea.cc:1017
  • http://crius.ro.lt
  • http://jbls.vvm.space
  • http://52.13.243.210:8000

استفاده از Selenium در پایتون

نوشته‌شده در توسط .

اصلا چرا اینجوری شد؟؟؟ چیه این زندگی؟ تموم تن من داره میلرزه… :))

من داشتم زندگیمو میکردم، وب کار میکردم و PHP و Laravel که یهویی اومدم دانشگاه و دارم درس میخونم… البته همچنان کارم میکنم که گشنه نمونم… این وسط پایتونم تا حدودی به اجبار یاد گرفتم و الان تا یه حدودی باهاش راحتم، پایتون کارای سخت رو با سینتکس ساده انجام میده و میشه گفت آدم خوبیه!

دیروز از سر کنجکاوی باید یه صفحه ای رو هی باز میکردم لاگین میشدم و یه فرمی رو پر میکردم و سابمیت میکردم و یه آیدی رو هی افزایش میدادم و توی صفحات جدید بازش میکردم. یکم که خسته شدم گفتم چرا برنامه ننویسم که این کارو بکنه. رفتم گشتم دیدم یه کتابخونه ای هست که تقریبا واسه همه زبونای اسکریپت نویسی دسکتاپ هم موجوده، اسمش سلنیومه! با این کتابخونه میتونید مرورگر های مختلف رو باز کنید به المنت هاش دسترسی داشته باشید و در کل اکثر کارایی که یه آدم پشت مرورگر میتونه انجام بده رو میتونید باهاش انجام بدید. سلنیوم برای پایتون رو میتونید اینجا ببینید : selenium-python.readthedocs.io

برای نصب میتونید از pip استفاده کنید :  pip install selenium

درایور هر مرورگر رو هم باید نصب کنید تا با این کتابخونه مچ بشه، مثلا برای کروم میتونید از اینجا اقدام کنید

کاری که من با این ابزار استفاده کردم یکم پیچیده بود ولی شما برای شروع میتونید با این کد تست کنید که همه چی اوکی هست یا نه

بصورت خلاصه اگه بخوام بگم، کد بالا سایت پایتون.ارگ رو باز میکنه و توی سرچ باکسش یچیزی رو سرچ میزنه… بعضی وقتا خیلی به درد میخوره باور کنید 🙂

منابع یادگیری فریمورک لاراول

نوشته‌شده در توسط .
منابع یادگیری لاراول

امروز دیگه خیلی حس هیچ کاری نبود گفتم یچی بنویسم که اینجا خالی نباشه، کلا این روزا خیلی خوب شدم، هر چند چرت و پرت، ولی باز خوبه که مینویسم. لاراول فریمورک خیلی خوبه که به زبان PHP نوشته شده که میتونید ازش استفاده کنید و اپلیکیشن های تحت وبتون رو خیلی سریع و آسون و بدون دردسر راه بندازید. اگه تازه دارید شروع میکنید که لاراول یاد بگیرید باید بدونید که کارتون زیادم سخت نیست و اگه PHP بلدید خیلی راحت میتونید یاد بگیرید لاراول رو هم. میتونید از طریق منابع زیر لاراول رو یاد بگیرید:

داکیومنت های خود سایت لاراول

سایت خود لاراول بهترین جا هست که ازش یاد بگیرید. البته میتونید بعنوان مرجع داشته باشیدش و ازش استفاده کنید : https://laravel.com/docs/5.5 و میتونید هر جور که دوست دارید یه نسخه آفلاین ازش تهیه کنید و استفاده کنید ازش

ویدئو های آموزشی لاراکستس

سایت لاراکستس توسط یکی از توسعه دهنده های لاراول به نام جفری وی مدیریت میشه و کورس های آموزشیش بی نظیر هست در مقایسه با ویدئو هایی که برخی از دوستان وطنی ارائه میدن و… آدرس سایت : http://laracasts.com

سایت لاراول نیوز

اکه میخواید از روند تغییرات و اخبار لاراول با خیر باشید سایت لاراول نیوز رو دنبال کنید : https://laravel-news.com

سایت لاراول تریکس

این سایتم کلی تریک لاراولی داره و میتونه به دردتون بخوره، فقط من نمیدونم چرا ایرانیها بیشتر از همه استفاده میکنن از این سایت(الکساش روی ایران ست شده) : http://laravel-tricks.com

سابتهای ایرانی از جمله سایت git.ir هم کلی ویدئو گذاشتن که میتونید دانلودشون کنید اگه به حلال و حروم اعتقاد ندارید 🙂

و کلی منبع دیگه که میتونید با سرچ برسید بهشون

ساختن توابع Helper در لاراول

نوشته‌شده در توسط .

هلپر در لاراول به توابعی گفته میشن که همه جای پروژه بهشون دسترسی داریم بدون اینکه هر بار لودشون کنیم.

لاراول کلی هلپر خوب بصورت آماده داره که خیلی از کارهارو براتون آسون میکنه، مثل کار با آرایه ها، فایل ها، رشته ها، روت ها و یکی از پر کاربرترینشون هم همین dd  خودمون :). شما میتونید هلپر های خودتون رو بصورت دستی هم تعریف کنید و با کمپوزر بصورت خودکار لودشون کنید.

نحوه ساختن فایل Helper در لاراول

همونطور که گفتم هلپر ها تابع هستند پس باید داخل یه فایل نوشته بشن. لاراول هیچ دایرکتوری خاصی برای helper ها در نظر نگرفته و شما میتونید بصورت دلخواه براش جا در نظر بگیرید. من مثلا داخل app/Http/Helpers  رو برای این کار در نظر میگیرم و داخلش فایل main.php  رو قرار میدم.

لود خودکار فایل ها در لاراول با کمپوزر

یکی از کاربردهای باحال کمپوزر جدا از مدیریت نیازمندی ها، همین autoload هست که به شما این امکان رو میده که در ران تایم فایل های دلخواهتون رو توی کدتون لود کنید بدون اینکه اون بالا بنویسید require_once any.php . در پروژه لاراولتون یه فایل دارید به اسم composer.json ، توی این فایل یه key به اسم autoload وجود داره و داخلش میتونید مشخص کنید که چه فایل هایی به autoload اضافه بشن. یه مثال واستون میزنم که کاملا بدونید چی به چیه :

به کمپوزر گفتم که فایل main.php  رو بذار توی autoload. حالا باید به کامپوزر بگیم که فایل های autoload رو از اول بسازه، برای این کار توی روت پروژه این کامند رو اجرا کنید :

حالا main.php  و فانکشن هایی که داخلش تعریف میکنید همیشه در دسترس خواهند بود.

تعریف توابع helper در لاراول

توابع هلپر مثل بقیه توابع هستند فقط باید حواسمون باشه که تابع دیگه ای رو رونوشت نکنیم :

هلپر ها خیلی(خیلی خیلی) جاها به دردتون میخورن ولی حواستون باشه که هر چی که لازم بود رو نذارید توی هلپر و فقط توابعی که خیلی ازشون استفاده میکنید رو بذارید داخلش و لذت ببرید.

 

موفق باشید 🙂

یک ربات ساده تلگرام با لاراول

نوشته‌شده در توسط .

امروز میخوام یه اطلاعات کلی در مورد ربات تلگرام و یه ربات ساده با تلگرام رو بهتون بگم. تلگرام یه api داره که میتونید یه ربات بر اساس همین api بنویسید و به رباتتون بگید که در حالتهای مختلف چیکارا بکنه. ربات در اصل اون پشت به سرور شما وصله و در نتیجه شما هر دستوری رو میتونید به ربات بگید و ربات دستور رو به سرور ارسال کنه و جواب رو برگردونه…

تصور غلط در مورد ربات تلگرام

یه سری از افراد چون به اسم ربات میرسن، فکر میکنن که ربات دستش برای همه چیز بازه و من خیلی ها رو دیدم که رباتی میخوان که یک خواسته نامعقول رو انجام بده. ربات با api تلگرام کار میکنه و هر درخواستی که توی api تلگرام وجود داره رو میشه با ربات صادر کرد و نه بیشتر. برای اطلاعات بیشتر میتونید به مستندات تلگرام در مورد ربات تلگرام مراجعه کنید.

ساخت یک ربات خام در تلگرام

عملیات ساخت ربات تلگرام خودش از طریق یه ربات انجام میشه، بات فادر اسم رباتی هست که این کار رو انجام میده و برای دیدن اون میتونید به این آیدی مراجعه کنید : @BotFather، نحوه ساخت ربات با botfather خیلی مشخصه و نیازی به توضیح نیست. بعد از ساخت ربات یه توکن به ربات تعلق میگیره و از این به بعد این توکن بعنوان شناسه ربات شما استفاده میشه. توکن شما یه چیزی شبیه  ۱۲۳۴۵۶:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 هست که توی این نوشته به اختصار از  <token>  برای نشون دادنش استفاده میکنیم.

نحوه ی اهراز هویت ربات توسط تلگرام

همه درخواست های شما به آدرس زیر ارسال خواهد شد :

که  METHOD_NAME  نام متدی هست که قراره در هر درخواست ازش استفاده کنید.

شما میتونید با هر زبان سمت سروری بک اند رباتتون رو بنویسید. برای اینکه درخواست هایی که از طریق کاربران ربات به ربات ارسال شدن رو دریافت کنید دو روش دارید:

  1. دریافت آپدیت ها با ارسال لحظه ای درخواست از طرف شما
  2. تنظیم وب هوک برای دریافت آپدیت بدون ارسال درخواست لحظه ای

در روش اول شما به صورت بروت فورس هر چند لحظه یکبار درخواست ارسال میکنید و پیام های جدیدی ک اومدن رو دریافت میکنید ولی در روش دوم یه وب هوک تنظیم میکنید و هرلحظه که پیامی به ربات اومد اون هوک در اسکریپت شما اجرا میشه و اینجوری دیگ خیلی خوش بحالتونه. چون درخواست ها همون لحظه به دستتون میرسن ولی یه خوبی که روش اول داره اینه که نیازی به داشتن ssl روی هاست نیست ولی روش دوم ssl میخواد.

درخواست  getUpdates ربات تلگرام

در این روش شما offset و limit رو میدید و آپدیت های مورد نظر رو دریافت میکنید. توجه کنید که offset بر اساس آیدی پیام ارسال میشه نه چیز دیگری.

تنظیم  setWebhook برای ربات تلگرام

برای این کار شما باید آدرسی که میخواید هوک روی اون fire بشه رو میفرستید و تلگرام به محض دریافت پیام جدید درخواست رو به این آدرس ارسال میکنه. برای ارسال درخواست هاتون میتونید از افزونه postman برای کروم استفاده کنید که کارتون رو راحتتر میکنه. توجه داشت باشید که برای این کار شما حتما باید گواهینامه ssl داشته باشید و آدرس بصورت https ارسال بشه.

استفاده از پکیج irazasyed/telegram-bot-sdk

اگه توی لاراول دارید کار میکنید میتونید از irazasyed/telegram-bot-sdk استفاده کنید. این پکیج کارتون رو خیلی راحتتر میکنه… بعد از نصب این پکیج میتونید برای تست اون از طریق زیر عمل کنید

ابتدا توی فایل  .env  توکنی که برای ربات دریافت کردید رو بصورت زیر وارد کنید

و توی کدتون هم یچیزی مثل این رو بنویسید

در صورتی که اطلاعات ربات رو دریافت کردید ینی ربات شما درست ایجاد شده است. تنها کاری که الان باید بکنید اینه که یه route رو از csrf protection در بیارید و اون روت رو بعنوان url برای هوکتون در نظر بگیرید و درخواست ها رو هندل بکنید.

 

دیزاین پترن singleton در PHP

نوشته‌شده در توسط .

در ادامه بحث هامون در مورد دیزاین پترن ها امروز میخوام بصورت خلاصه در مورد singleton design pattern بنویسم که فکر میکنم به درد خیلی هاتون بخوره و خیلی از پیچیدگی کد نویسی رو براتون کمتر کنه. بصورت خلاصه و مفید اگه بخوام بگم این دیزاین پترن همونطور که از اسمش پیداست از تکرار جلوگیری میکنه و جاهایی استفاده میشه که بخوایم یه کد تکراری رو فقط یکبار بنویسیم. پس سینگلتون جاهایی به کارمون میاد که ما به یه نمونه از شی بصورت گلوبال میخوایم دسترسی داشته باشیم. مثلا شما ممکنه مجبور باشید توی یک سیستم بارها به دیتابیس وصل بشید. یا ممکنه بخواید از api یه سایت دیگه هر چند بار پشت سر هم استفاده کنید یا هر چیز دیگه ای که خودتون صلاح میدونید… با مثال توضیح میدم که ایده ی این الگو چطور هست. در زیر یه پیاده سازی پایه از این الگو رو میبینیم :

همونطور که میبینید Instance  به صورت متد استاتیک تعریف شده و بصورت استاتیک بهش دسترسی پیدا میکنیم.

دیزاین پترن Simple Factory در PHP

نوشته‌شده در توسط .

سلام، بعد از یه وقفه ی نسبتا طولانی امروز دوباره تصمیم گرفتم که این وبلاگ متروکه رو آپدیت کنم و یسری پست که احساس میکنم خوبن رو اینجا بفرستم… البته پستای قبلیمو دارم میبینم اکثرا چرت و پرتن و ارزش خوندن ندارن ولی به هر حال وبلاگ خودمه و کلی پول هاست و دامین دادم و دوس دارم که بعنوان یادگاری همینجا باشن و کسی اگه اعتراض داره میتونه مراتب اعتراضش رو تحت یک کامنت برام ارسال کنه تا بررسی و پاسخ داده بشه 🙂

Design patternها یا فارسیش میشه احتمالا الگوهای طراحی نرم افزار توی همه زبان ها خیلی خیلی مهمن. معمولا وقتی کدی مینویسیم که قرار نیست در آینده گسترش داده بشه خیالمون راحته و از یجای کار شروع میکنیم و یجا تموم میکنیم و کار رو تحویل میدیم، ولی وقتی کارفرما میگه که “در آینده قراره امکانات زیادی از قبیل فلان۱ و فلان۲ و… به سیستم اضافه بشه”، اونجا باید یه فکر پایه ای تر برای سیستم داشته باشیم. طوری که اگه قرار شد یه بخش جدید رو به سیستم اضافه کنیم مجبور نباشیم تو بخشای قبلی دست اندازی کنیم یا حداقل کم مجبور باشیم(!).

فرض کنید که میخواید یه فروشگاه بنویسید که ادمین روزی چند تا محصول از نوع اسباب بازی به سیستم اضافه میکنه. ابتدایی ترین روشی که به فکر همه ما میرسه اینه که یه کلاس ایجاد کنیم تحت نام Product  و توی اون درج، اصلاح، حذف و … محصول که فعلا اسباب بازی هست رو انجام بدیم. یه چیزی شبیه این :

 

 

تا اینجا همه چی خوبه و شما در آرامش قبل از طوفان به سر میبرید! مشکل زمانی پیش میاد که مجبور بشید مثلا بجز اسباب بازی ، کتاب هم در فروشگاهتون بفروشید. اینجا دیگه روش ایجاد و اصلاح و … فرق میکنه و نمیتونید همین متد های قبل رو استفاده کنید. توی دیزاین پترن بالا شما مجبورید یه $type  زمان نمونه گیری از کلاس بگیرید و توی هر متد if و else بذارید و بگید اگه این دسته بود این کارو بکن و اگه… که قطعا روش خوبی نیست و مثلا وقتی چنتا دسته دیگه بعدها اضافه بشه کدمون خیلی داغون میشه.

نحوه ی پیاده سازی دیزاین پترن Simple Factory در PHP

سیمپل فکتوری دیزاین پترن میگه که شما این کارو بکنید :

 

اول یه کلاس factory بسازید :

 

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

حالا اگه یه دسته جدید مثل کتاب به محصولاتون اضافه شه خیلی راحت میتونید کلاسش رو بسازید محصولتون رو اضافه کنید :

احتمالا الان میگید که این که خیلی پیش پا افتاده بود و شاید شما خیلی کارای خفن تر هم میتونید انجام بدید ولی خب بعضی وقتا همین کارای ساده باعث منظم شدن برنامه میشن و در آینده خودتون و مخصوصا دیگران کمتر اذیت میشن. البته این دیزاین پترن همونطور که از اسمش مشخصه سیمپل بود و  در آینده در مورد پترن های دیگه هم صحبت خواهیم کرد حتما…

 

امیدوارم کمکتون کرده باشم و خوشحال میشم نظراتتون رو بشنوم 🙂

ساخت custom notification channel در لاراول

نوشته‌شده در توسط .

لاراول برای ارسال نوتیفیکیشن درایور های متنوعی داره که برای کاراتون میتونید ازش استفاده کنید… ولی بعضی وقتا پیش میاد که نیاز دارید چنل خودتون رو داشته باشید، برای این کار باید کانال ارسال خودتون رو بنویسید که خیلی راحته

مثلا در مسیر app  یک فولدر با عنوان channels  بسازید و توش یه کلاس php با اسم دلخواهتون ایجاد کنید. من اسمشو میذارم SmsChannel .

در قسمت do your action عملیاتی که برای ارسال نوتیفیکیشنتون(!) رو که میتونه متنوع باشه رو انجام بدید… مثلا اگه میخواید با استفاده از یه سرویس دهنده خاص اس ام اس ارسال کنید میتونید کلاسهای اون رو ایمپورت کنید و اس ام اس رو ارسال کنید.

مثلا برای ارسال پیامک بصورت زیر عمل کنید :

که آرایه message  از متد های کلاس های نوتیفیکیشن ها ارسال میشه…

برای ارسال نوتیفیکیشن در متد via  در کلاس نوتیفیکیشن  \App\Channels\SmsChannel::class  رو برگردونید… یه چیزی مثل این :

که میتونید از $notifiable  استفاده کنید و ببینید که اس ام اس واسه کاربر ارسال بشه یا نه… مثلا اعتبار کاربریش اجازه ارسال رو میده یا نه.

و متد زیر رو برای ارسال پیام در کلاس مربوط به نوتیفیکیشن بنویسید :

 

باز شدن ناگهانی کانال تلگرام و درخواست عضویت

نوشته‌شده در توسط .

اگه دارید این مطلب رو مطالعه میکنید حتمن شما هم به مشکل روزهای اخیر من برخورد کردید… چند وقتی بود که این مسئله به شدت رو مخم بود و امروز بالاخره فهمیدم مشکل از کجاست و به شما میگم تا با همکاری همدیگه ریشه کنش کنیم…

مشکل: دارید توی اینستا و یا تلگرام و یا هرجای دیگه میچرخید که یهویی پرت میشید توی تلگرام و یه کانال باز میشه و بهتون میگه که آیا مطمئنید که میخواید توی کانال فلان عضو شید؟ و ازتون میخواد اوکی کنید تا توی کانال عضو شید….

دلیل رو اینجوری پیدا کردم : چک کردم دیدم توی وب خارج هیچ سوالی در این مورد پرسیده نشده، فهمیدم که کار خودمونه… ینی ایرانیا 🙂 یه برنامه ایرانی روی گوشیم داشتم، حذفش کردم و مشکل درست شد!!! ینی از هر روشی استفاده میکنیم که پول در بیاریم… حتی به قیمت زیر سوال رفتن برنامه اصلیمون…

برنامه ای که برای من مشکل درست کرده بود اسمش هست : “عکس نوشته ساز”. اگر این برنامه رو نصب دارید که حتمن کار خودشه… اگه ندارید هم چک کنید ببینید کدوم برنامه هست و اسمش رو کامنت کنید زیر این پست تا بقیه هم بدونن…

 

البته من به بازار هم مشکوکم و خدا کنه که کار بازار نباشه این حرکت… که اگه باشه باید همگی سرمونو بذاریم زمین و بمیریم 😐

 

موفق باشید