1. Skip to Menu
  2. Skip to Content
  3. Skip to Footer

ارسال ایمیل از طریق Swiftmailer

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

 

$message = \Swift_Message::newInstance()

->setSubject('Subject')

->setFrom('این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید')

->setTo('این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید')

->setBody(

'<html></html>'

)

),'text/html'

)

;

سیمفونی چیست؟

سیمفونی

تولید نرم افزاهای بزرگ کاری دشوار، هزینه بر و زمان بری است . از این رو تولید نرم افزار خود یک پروژه است که باید با استفاده از دانش های مدیریت پروژه ، مدیریت شود.
هدف نهایی تمامی فعالیتها در پروژه های نرم افزاری تولید و پیاده سازی نرم افزار است.
در تولید نرم افزارهای تجاری فعالیت هایی وجود دارند که برای برنامه نویس تکراری است اما مهم . از آن جمله کار با پایگاه داده و ایجاد فرم ها، مدیرت کار کاربران و دسترسی ها و امنیت ، ارسال ایمیل ، ایجاد قالب صفحات و ... این گونه فعالیتها معمولا زمان بر است اما هیچ بار ارزشی برای برنامه نویس ندارد. اگر ابزاری فراهم باشد که این کارها را خودکار انجام دهدف برنامه نویس می تواند فارغ از این گونه دغدغه ها ذهن و زمان خود را روی منطق برنامه خود متمرکز نماید ، میتواند در زمان کمتر ، هزینه پایین تر نرم افزار باکیفیت تری را توسعه دهد .
فریم ورکها مجموعه ای از ابزارها را فراهم می کند که کارهای تکرار شونده در فرآیند برنامه نویسی را تسهیل نمایند ، ابزارهایی برای مدیریت بهتر کدها و راحتی نگهداری کد و کتابخانه هایی برای انجام پاره ای کارها از قبیل ارسال ایمیل و SMS و ... دارند.
برخالف زبانهای ایجاد شده توسط مایکروسافت که فریم ورکا محدودی دارند ، در زبان PHP به علت متن باز بودن فریم ورک های متنوع با قابلیت های متفاوت ایجاد شده است که از جنبه های مختلف متفاوت بایکدیگرند.
سیمفونی یکی از قدرتمند ترین و با کارایی بالای این فریم ورک ها است اما به علت پیچیدگی یادگیری ، در ایران کمتر کسی سراغ این فریم ورک رفته است .
ابزارهای قدرتمندی که این فریم ورک در اختیار برنامه نویس قرار می دهد عبارتند از
- هسته سیمفونی
- پایه های HTTP (http foundation)
- فرم ها
- امنیت
- ارسال ایمیل (swift)
- نمایش(Twing)
- پایگاه داده (Prople or Doctrine)
و نیز ابزارهایی که در قالب افزونه می توان روی سیمفونی سوار کرد. تمامی ابزارهایی که سیمفونی در اختیار قرار می دهد از بهترین تجارب سازندگان آن در آن حوزه می باشند که مجموعه آن ها فریم ورک تقریبا بی نقصی را ایجاد کرده است . اما کارکرد هریک از آن ها و شرح توابع آن ها خود یک مقاله مجزا می خواهد که در این مقاله نمی گنجد. در این مقاله به فلسفه سیمفونی و توضیح مختصری از ابزارهای هسته سیمفونی و ابزارهای جانبی آن می پردازیم.
یادگیری سیمفونی از این جهت دشوار است که شما نه تنها سیمفونی یاد می گیرید بلکه با مفاهیم وب و بهترین تجربیات توسعه نیز آشنا مس شوند و اینکه چگونه از کتابخانه های جالب PHP استفاده نمایید.
سیمفونی 2 بر اساس یک فلسفه بسیار ارزشمند بنا نهاده شده است و آن هم پیاده سازی فلسفه وب است. پس برای درک کارکرد سیمفونی 2 بهتر است ابتدا نگاهی به کارکرد وب بیاندازیم .
ما در این مقاله نمی خواهیم به آموزش سیمفونی بپردازیم فقط به بیان مفاهیم بسنده می کنیم.
http ساده و دوست داشتنی


http (Hyper Text Translator Protocol) یک پروتکل متنی است که اجازه می دهد دو ماشین از هر دو نقطه ای در شبکه با هم ارتباط داشته باشند . به مثال زیر توجه داشته باشید:
فرض کنید می خواهید آخرین مقالات سایت نیاسان را مشاهده نمائید تقریبا فرآندی مشابه تصویر زیر اتفاق می افتد.
1- مرورگر شما از سرور درخواست می کند آخرین مقالات را به من بده
2- سرور صفحات را آماده می کند.
3- سرور پاسخ می دهد بله و فایل HTML صفحه را به مرورگر بر می گرداند.
HTTP این فرآیند را به زبان متنی بیان می کند . این که می گوئیم زبان متنی است بدین معنی است که تمامی اطلاعات رد و بدل خود را چگونه توسعه داده اید ، هدف وب سرور درک درخواست کاربر و ایجاد و برگرداندن فایل HTML به کاربر است. سیمفونی 2 کاملا منطبق بر این فلسفه ایجاد شده است . HTTP مفهومی است که هر روز با آن که سروکار دارید ، چه در کامپیوتر شخصی تان و چه در تلفن هوشمند همراهتان که به اینترنتت وصل است برای اطلاعات بیشتر در زمینه HTTP به بخش آموزش HTTP مراجعه نمائید.
در HTTP دو مفهوم اساسی داریم : 1- درخواست کاربر 2- پاسخ سرور
این فرآیند درخواست و پاسخ در سراسر وب وجود دارد و قدرت آن بر سادگی آن است.
هنگامی که ما می گوئیم سیمفونی 2 کاملا منطبق بر فلسفه وب است بدین معنی است که نرم افزارهای روی سیمفونی 2 نیز باید منطبق بر این فلسفه باشند. این بدان معنی است که در سیمفونی 2 هر صفحه ای که کاربر درخواست می کند نرم افزار ما باید این درخواست را بگیرد و در نهایت هم پاسخی برگرداند ، هسته سیمفونی نیز همین کار را می کند. درخواستی را می گیرد ، درخواست را به برنامه ما می دهد، پاسخ را از برنامه ما به کاربر بر می گرداند.
درخواست و پاسخ در سیمفونی

هدف سیمفونی گرفتن تفسیر URL و درخواست کاربر و ایجاد و برگرداندن پاسخ مناسب به کاربر است و کاملا مطابق با فلسفه وب ، فارغ از اینکه برنامه چه کاری انجام می دهد ، چقدر بزرگ است و ...
هدف نهایی سیمفونی 2 ایجاد کاری انجام می دهد، چقدر بزرگ است و .... هدف نهایی سیمفونی 2 ایجاد پاسخ است. برای این منظور سیمفونی دو کلاس مهم دارد ،Request , Response این دو کلاس توابعی برای مدیریت این فلسفه دارند. در کلاس Request توابعی برای دستیابی به داده های درخواست کار از جمله get() که یک پارامتر را می گیرد و در واقع یک ParameterBag است.
در کلاس Response توابعی برای تعیین سرآیندهای پاسخ HTTP و کار با محتوای صفحات قرار دارد و در نهایت نیز تابع send() که پاسخ آماده شده را به کاربر برمی گرداند.
در برنامه هایی خارج از سیمفونی نیز شما می توانید از این دو کلاس مفید و جالب سیمفونی نیز استفاده نمایید .
این دو کلاس ابزارهای شیئی گرایی برای دریافت درخواست و ایجاد پاسخ در اختیارها قرار می دهند که بسیار مهم هستند .
فرآیند بین دریافت درخواست و ایجاد پاسخ منطبق برنامه شماست که کار اصلی برنامه نویس است. نرم افزار شما ممکن است کارکردهای زیادی داشته باشد ف ایمیل ارسال نماید ، فرمی را باز کند ، اطلاعاتی را در پایگاه داده ذهخیره نماید ، اما در نهایت باید یک پاسخ مناسب ایجاد نماید.
سیمفونی برای اینکه این پیچیدگی را از مفهوم ساده درخواست ، پاسخ خود مجزا نماید ، مفهومی ارائه داده است به نام کنترلر مقدماتی ، در ادامه با این مفهوم بیشتر آشنا می شوید.
کنترلر مقدماتی
در گذشته های دور برای هر صفحه ای در نرم افزار یک فایل PHP مجزا در نظر می گرفتند . این مشکلات زیادی فراهم می کرد مثلا باید در ابتدای همه فایلها دسترسی به آن چک می شد، اگر نام فایل تغییر می کرد ، تمام قسمتهایی که به آن لینک داده اند باید اصلاح می شدند، اگر تغییر کلی در نرم افزار قرارد بود ایجاد شود کلیه فایل ها باید اصلاح می شدند که خود مشکلاتی برای نگهداری از کد ایجاد می کرد، مشکلات امنیتی در اثر فراموش کردن چک دسترسی در یک فایل و از این قبیل مشکلات، اما سیمفونی برای حل مشکل یک راه کار ساده دارد، استفاده از کنترلر مقدماتی .
کنترلر مقدماتی یک فایل ساده PHP و در واقع راه انداز برنامه سیمفونی است . در این کنترلر است که درخواست کاربر گرفته می شود، تصمیم می گیرد چه تابعی را اجرا کند و پاسخ را به کاربر برمی گرداند . این کنترلر کلیه تنظیمات مربوط به برنامه را نیز بارگذاری کرده و هسته سیمفونی را راه اندازی می کند و درخواست را به هسته می سپارد و پاسخ را نیز از هسته دریافت و به کاربر ارسال می نماید.
این کنترلر مقدماتی است که چک می کند کاربری به صفحه مربوطه دسترسی دارد یا خیر ، با چه URI یی دام صفحه را اجرا نماید و ...
همه درخواستهای کاربر به کنترلر مقدماتی ارسال می شوند و با استفاده از مفهومی به نام مسیر یابی مسیر مربوط به کنترلر ثانویه شناسایی شده و کنتربر ثانویه که یک تابع PHP در یک کلاس است اجرا می شود. پس برای ایجاد صفحه در سیمفونی 2 به دو مفهوم دیگر نیز نیاز مندیم.
1- مسیر یابی
2- کنترلر ثانویه که از این به بعد به آن کنترلر می گوئیم .
به پیشنهاد سازندگان سیمفونی ما به هیچ عنوان با کنترلر مقدماتی کاری نداریم و آن یکبار توسط آن ها ایجاد شده و برای ما قرارداده شده است. مسیر این فایل در برنامه سیمفونی در پوشه web/app-der.php/app.php است.
قبل از اینکه به بحث مسیریابی و کنترلرها بپردازیم بهتر است یک معرفی کوتاهی درباره کتابخانه های سیمفونی داشته باشیم.
ابزارهای سیمفونی 2
در این بخش می خواهیم به سوال مهم و اساسی سیمفونی چیست؟ پاسخ دهیم. سیمفونی مجموعه ای بالغ بر بیست کتابخانه مستقل از کلاس هایPHP است که هر پروژه PHP قابل استفاده است به این کتابخانه ها کامپوننت سیمفونی می گوئیم.
این کتابخانه ها ابزارهای مفیدی برای موقعیت های خاصی دارند. در زیر به برخی از آنها اشاره می کنیم .
- HTTPFondution :کلاسهای Request و Response و در ضمن کلاسهایی برای مدیریت بارگزاری فایل ها و مدیریت Session دارد.

- Routing : سیتم قوی مسیریابی که به شما اجازه می دهد یک URI خاص را به برخی اطلاعات از جمله این که درخواست ورودی چگونه باید رسیدگی شود نگاشت کنید.
- :Form یک فریم ورک کاملی است که برای مدیریت و ایجاد فرمها و رسیدگی به ارسالها کاربرد دارد.
- Validation: یک سیستم برایایجاد قوانین در مورد داده ها و سپس اعتبارسنجی داده های کاربر بر اساس قوانین است.
- Class Loader : یک کتابخانه که به کلاسهای PHP اجازه می دهد بدون نیاز به استفاده از توابع include و require فایهای آن را فراخوانی کنیم.
- Templating : جعبه ابزاری ارزشمند و قوی برای رندر کردن قالبها ،کارکردن ارث بری و اجرای سایر وظایف قالب
- Security : کتابخانه ای برای کاربا، همه نوع امنیت در برنامه شما
- Translation: یک فریم ورک برای ترجمه متون داخل نرم افزار
- هریک از این کتابخانه ها می توانند مستقلا در هر پروزه PHP دیگری استفاده شوند. تمامی این قسمت ها طوری طراحی شده اند که در صورت لزوم استفاده شوند و یا در پاره ای مواقع حتی جایگزین گردند.
- سیمفونی 2 یک کتابخانه PHP است که دو وظیفه اساسی دارد
1- کامپوننتهای منتخب را فراهم آورده و نیز از برخی کامپوننت های خارجی مانند Swift mailer استفاده می کند.
2- پس از پیکربندی طوری کنار هم قرار می دهد که یک کار واحدرا می توانند انجام دهند.
هدف نهایی فریم ورک تجمیع ابزارهای مستقل به منظور فراهم آوردن ابزاری برای برنامه نویسان است.
سیمفونی 2 برای کاربران عادی ابزاری دارد که به سرعت می توانند برنامه خود را ایجاد کنند و انجام دهند و برای برنامه نویسان حرفه ای هم که می توانند تا اوج آسمان پرواز کنند .
شعار سیمفونی در این باره ، تولید نرم افزار با شما ابزار با ما است.
مسیریابی
این مفهوم یک مفهوم ساده ولی بسیار پرکاربرد و قدرتمند در سیمفونی است. مسیریابی در واقع دستوراتی دارد که توسط آن یک URI درونی سیستم به یک کنترلر با پارامترهای مربوط به آن نگاشت می شود.
هر ورودی مسیر یک نام منحصر به فرد دارد. در صورتی که نام تکراری باشد با خطا مواجه نمی شوید بلکه به اولین ورودی به آن نام که رسید همان را اعمال می کند. کلیه تنظیمات مسیریابی می توانند در فایل هایییا فرم yml,Xml,PHP ذخیره شوند. فایل اصلی در مسیر app/config قرارددارد.
با استفاده از دستور resource و prefix مشخص می کنیم که برای prefix مربوطه چه فایل تنظیمات دیگری بارگذاری گردد. هر ورودی مسیر علاوه بر نام یک الگو (patern) دارد که الگوی مربوط به URI را مشخص می کند.در الگو می توانید پارامترها را با فضا نگهدار{pname} که به جای pname; پارامتر را ذکر می کنید از کاربر بگیرید. علاوه بر الگو تنظیمات Default که کنترر به همراه پارامترهای آن را مشخص می کند.
تمامی قدرت این کامپوننت به امکان صدا زدن آن با نام مسیر و ایجاد پترن و سرعت تطبیق پترن با URI ورود است . برای تغییر URI ها فقط کافی است. pattern را در هر مسیر مورد نظر تغییر دهیم. در سیستم داخلی برنامه، تغییری ایجاد نمی کند و کلیه اعمال داخلی پروژه نرم افزاری یدون وابستگی به URL کار می کند. هر مسیر (Route) به یک کنترلر نگاشت می شود.
کنترلرها
در سیمفونی 2 کنترلرها درخواست کاربر را می گیرند و پاسخ مناسب ایجاد کرده و به کاربر می فرستند هر کنترلر یک تابع PHP است. محل نگهداری کنترلرها در کلاس مربوطه در پوشه Contollers باندل است.برای اینکه قابلیت های بیشتری به کنترلر بدهیم می توان آن را فرزند کلاس Controller سیمفونی قرار دهیم یعنی
ContnameController Extens Controller
به آن قدرت بیشتری بدهیم از جمله این قابلیت ها رندر کردن قالب است. در کنتربر کلیه منطق برنامه پیاده سازی می شود و در نهایت شیی Response ایجاد شده محتوای مربوطه در آن قرار می گیرد و به کاربر بر می گردد شمای کلی یک کنترلر به صورت زیر است.
Class ControllerName Controller
{
contAction(Request request)
{
Return new response();
}
}
به تابع داخل کلاس کنترلر که با Action خاتمه می یابد کنترلر می گوئیم.
اما این کلاس یک کلاس ساده است و محتوای HTML ساده ای به آن دهیم به سختی ایجاد می کند. ما برای ایجاد محتواهای پیچیده و قدرتمند نیاز به ابزاری برای ایجاد قالب و رندر کردن آن داریم برای اینکه این ابزار در اختیار ، قرار گیرد با یه کلاس به صورت
Class controllerName controller exterral controller
در بایید و به جای Return new response()
از تابع return this -> renders()
استفاده می کنیم.
تابع render یک رشته حرف به عنوان نام قالب و یک آرایه به عنوان پارامترهای پاس شده به قالب دریافت می کند.
قالب ها
سیمفونی ابزار قدرتمندی به نام Templating دارد که می توان قالبهای متنوع با قابلیت هایی از جمله ارث بری ایجاد کرد.
برای ایجاد قالب می توان از PHP ساده و یا Twing استفاده نمود. در هر دو حالت نتیجه یکسان است. اما Twig دستوراتی دارد که کار ایجاد قالب را راحت تر و لذت بخش تر می کند چون بیشتر شبیه HTML است و طراحان بیشتر دوست دارند با HTML کار کنند و اگر جایی کد PHP ببینند ممکن است دچار ترس شوند.
در سیمفونی نحوه دسترسی به قالب ها به صورت زیر است
“BundlefullName:ControllerName:Template”
قالب ها در پوشه
Resources/views/…./
قرار دارند. همانطور که ذکر قالب ها می توانند PHP و یا هم می توانند twig باشند و هیچ فرقی نمی کند از هر کدام که تمای داشتید در هر صفحه ای می توانید استفاده کنید ولی همزمان برای یک صفحه نمی توانیم از هر دو استفاده نمائید یعنی Twig را داخل PHP و یا PHP را داخل Twig به کار ببرید. برای اطلاعات بیشتر به صفحه Twig مراجعه نمائید.
باندل چیست؟
سیمفونی برای بهتر مدیریت کردن کدهای PHP پروژه تان یک ساختار پیشنهاد می دهد در این ساختار همه چیز در جای مشخص شده خود قرار دارند البته می توانید از این ساختار پیروی نکنید. در این ساختار پوشه بندی سطح بالای پوشه ، پوشه باندل نام دارد. در واقع باندل تیکه نرم افزاری مانند افزونه ها است با این تفاوت که باندل تمام امکانات مورد نیاز برای کارکردن را همراه خود و در پوشه مربوطه دارد. منظور از تمام امکانات کلیه فایل های مورد نیاز برای کارکرد است. از جمله کلیه کلاسها، فایل های تصویر ، فایل های جاوا اسکریپت و CSS و قالبهای خود را دارد.
ساختار پوشه بندی قالب به این صورت است:
Src/vendorName/BundleNameBundle/
Controllers
DepandencyInjection
Entity
Resources
Config
Translation
Views
باندل ها این قابلیت را دارند که از یک پروژه در پروژه دیگر دوباره استفاده شوند.
درباره باندل ها باید این نکته از یاد نرود که حتی کتابخانه های هسته سیمفونی نیز هر کدام باندل اند و خود سیمفونی نیز یک باندل با همین نام است و از همین ساختار پیروی می کند. سیمفونی در ساختار پروژه ها ی خود از MVC استفاده می کند. چنانچه با MVC آشنایی ندارید به مقاله MVC چیست مراجعه نمایید.
پیکر بندی سیمفونی
سیمفونی برای انجام تنظیمات مربوطه از سه الگو می تواند استفاده نماید، yaml,XMl,PHP که هر کدام مزایا و معایب مربوطه به خود را دارد.
کار با پایگاه داده
سیمفونی برای کار با پایگاه داده های مختلف طراحی شده و شما بدون هیچ نگرانی می توانید به راحتی پایگاه داده مورد نظر خود را انتخاب نمائید.
سیمفونی علاوه بر mysql از sql server به خوبی پشتیبانی می کند و هنچنین می توانید از پایگاه داده های اوراکل و Postgre و ... نیز استفااده نمائید.
برای این منظور به طور پیش فرض دو کتابخانه در اختیار قرارداده که به دلخواه از هر یک بخواهید می توانید استفاده نمائید .Doctrine,prople که هر دو تا از قدرتمند ترین ابزارهای این حوزه هستند هردو یک مدل و الگوی طراحی دارند که به آن ها ORM می گوئیم.
ORM چیست؟
پایگاه داده های رایج ما معمولا از نوع رابطه ای هستند و موجودیت های اصلی آن جداول و رکوردها و فیلدها هستند. در برنامه ما که غالباً شئی گراست ما کلاس و خواص کلاس را داریم بدین منظور باید یک رابطه ای بین پایگاه داده رابطه ای و برنامه شئی گرا ایجاد نمائیم که به آن ORM(Object Relational Mapping) می گوئیم که یک نگاشت گر شئی گرا به رابطه ای است استفاده می کنیم.
ORM ها یک لایه دارند که به آن DBAL می گوئیم که توسط این لایه برنامه ما از پایگاه داده مستقل می گردد و در واقع یک لایه انتزاعی روی پایگاه داده می باشد که چنانچه پایگاه داده را تغییر دهیم بدون نیاز به تغییری در برنامه نگران درست کار کردن برنامه در پایگاه داده جدید نخواهیم بود.
برای اطلاعات بیشتر درباره ORM ها و Doctrine به بخش آموزش Doctrine مراجعه نمائید.
سخن آخر
سیمفونی با تمام قابلیت های خوبی که به ما می دهد برای تولید نرم افزارهای کوچک به علت سختی در یادگیری و سربارهای اضافه که ایجاد می کند مناسب نیست. درست است که ما می توانیم نرم افزارهایی درحد یک صفحه را حتی با سیمفونی پیاده سازی کنیم و ترجیح هم همین است چون یک نرم افزار کوچک همیشه کوچک نمی ماند ولی در پاره ای مواقع حتی مناسب است از سیمفونی استفاده نکنیم این به خود شما بستگی دارد اما چنانچه علاقه مند به استفاده از سیمفونی هستید باید با عزمی راسخ قدم در این راه بگذارید چون یادگیری سیمفونی جالب اما دشوار است.

نویسنده : فرشید عبدی

عضویت در خبرنامه

ورود اعضا