استفاده از هلپر در فایل های کانفیگ لاراول
https://lamtakam.com/qanda/2168/استفاده-از-هلپر-در-فایل-های-کانفیگ-لاراول 0سلام دوستان من قصد داشتم از هلپری که واسه تنظیمات نوشتم داخل فایل های فولدر کانفیگ استفاده کنم که متاسفانه نمیشه البته ی راهی برای این کار وجود داره که میشه به این صورت مقادیر رو در AppServiceProvider تعیین کنیم
config([
'app.name' => getSetting('app_name'),
'sms.drivers.kavenegar.apiKey' => getSetting('kavenegar_api'),
'sms.drivers.kavenegar.from' => getSetting('number'),
]);
ممکنه که من ایتم های زیادی داشته باشم پس باید برای هرکدوم به همین صورت کدشو بنویسم, بنظر خودم که این کار اشتباهه ولی تا الان راه حل دیگه رو پیدا نکردم متاسفانه که اگه لطف کنید راه حل مناسبی رو توضیح بدید ممنون میشم
و سوال دوم در رابطه با نحوه کش کردن داده ها, همونظور که گفتم ممکنه من ایتم های زیادی داشته باشم مثلا 30 تا , خب حالا هروقت سایت بالا میاد 30 کوئری برای دریافت مقادیر اجرا میشه که اصلا خوب نیست! در اینجا میشه از کش کردن داده ها استفاده کرد.
این هلپری هست که برای تنظیمات نوشتم:
if (!function_exists('getSetting')) {
/**
* @param $key
* @return mixed
*/
function getSetting($key)
{
return Setting::where('name',$key)->value('val');
}
}
اگه به این صورت تغیرش بدم, درسته؟
function getSetting($key)
{
if (Cache::has('setting_'.$key)) {
return Cache::get('setting_'.$key);
}
$query = Setting::where('name', $key)->first();
Cache::forever('setting_'.$key, $query->val);
return $query->val;
}
1 | ببینید هر پروژه ای (مثل پروژه ی شما) یک سری اطلاعات و تنظیمات ثابت داره که باید توی یک فایلی با پسوند .conf نوشته بشن و در موقع نیازش با تابع conf() ازشون استفاده بشه. مشابه همون چیزی که شما خودت نوشتی (تیکه کد اولت). سوال من اینجاست که 1) چرا فکر می کنی این کار اشتباهه؟ 2) چرا میخوای بری سراغ کش کردن یک همچین دیتایی؟ ــ سعید مرادی در 6 سال قبل |
||
1 | @سعید.مرادی احساس می کنم که شما درست متوجه نشدی که ایشون داره چی کار می کنه. ایشون یک هلپر نوشته ظاهرا به اسم getSetting که کارش خوندن فایل های کانفیگ هست. حالا ظاهرا می خواد توی خود اون فایل ها، از همین تابع (یا به زبان خود سوال کننده از همین «هلپر») استفاده کنه که خب در دسترس نیست. ــ سجاد شفی زاده |
||
@سعید.مرادی در رابطه با اشتباه بودن اینکار مطمئن نیستم اما چون تا بحال هر پروژه ای رو دیدم واسه تنظیمات همچین کاریو نکرده(کد اول)...و سوال دوم, چون بنظرم کش کردن اون دیتا بهتر باشه,فرض کنید 10 ایتم تنظیمات داریم با هر بار لود صفحه 10 کوئری برای دریافت مقادیرشون اجرا میشه و اگه همون مقادیر رو کش کنیم سریع تر میتونیم دیتا رو دریافت کنیم و نیازی به اجرای دوباره اون کوئری ها نیست ــ مجتبی دلشاد در 6 سال قبل | |||
@سجاد.شفی.زاده.★ نه! تنظیمات در دیتابیس ذخیره میشن و این هلپر هم بر اساس اون key که بهش داده میشه مقدارشو از دیتابیس و جدول تنظیمات در یافت میکنه ــ مجتبی دلشاد در 6 سال قبل | |||
1 | ضمنا، از نظر من این نیازی که شما داری (آقای مجتبی دلشاد)، نیاز درستی نیست. چراکه فایل های کانفیگ، حاوی یک سری اطلاعات ثابت و از جنس تنظیمات هستن، چیزی نیستن که تو لازم داشته باشی از جایی دیگه بخونی این دیتا رو بعد بزاریش توی یک فایل .config . باید همه چیز به صورت hardCode توی فایل های .conf نوشته بشه. ــ سجاد شفی زاده |
||
2 | آها که اینطور ..! پس تنظیمات رو بردی سمت دیتابیس .. من توی یکی دو پروژه دیگه هم دیدم یک همچین معماری رو؛ ولی دلیلش رو متوجه نشدم، چرا دیتای مرتبط با تنظیمات پروژه رو بردی سمت دیتابیس؟ مگه همون فایل های .conf چه مشکل یا محدودیتی دارن؟ ــ سجاد شفی زاده |
||
@سجاد.شفی.زاده.★ واقعیتش این اولین پروژ کاملی هست که دارم با لاراول کار میکنم و توی پروژه های کوچیک دیگه خیلی از قسمت ها مثل همین تنظیمات رو نداشتم...پس نظرتون اینه از دیتابیس استفاده نکنم و داخل یه فایل کانفیگ دیتا رو داشته باشم...اتفاقا همین مورد رو توی یه پروژه اوپن سورس دیدم اما اونجا هم داخل یه فایل کانفیگ ذخیره میشد و هم در دیتابیس ــ مجتبی دلشاد در 6 سال قبل | |||
3 | این کدی که برای کش کردن اطلاعات (جدول تنظیمات) با کلاس Cache نوشتی خب درسته. یک راه ساده تری هم هست که engine اون جدولی که در دیتابیس ساختی و اطلاعات تنظیمات رو داری توش نگهداری می کنی رو به memory تغییر بدی (الان احتمالا innodb ) هست. وقتی اون تغییر رو انجام بدی، تمام دیتای اون جدول همیشه روی Ram قرار می گیره و یه جورایی برای همیشه کش هست :-) ــ ساناز رضایی در 6 سال قبل |
||
@ساناز.رضایی ممنونم ولی فکر کنم دیگه بیخیال دیتابیس شدم با توجه به توضیحات دوستان ذخیره در فایل کانفیگ مناسب تره ــ مجتبی دلشاد در 6 سال قبل | |||
1 | بله من هم موافقم که ذخیره اطلاعات در فایل مناسب تره. فقط گفتم اون نکته رو هم بگم که بجای استفاده از کلاس Cache در لاراول و درگیر شدن با توابع ::has() و ::get() ، میشه به راحتی انجین جدول رو به memory تغییر داد و برای همیشه اطلاعات اون جدول رو روی رم قرار داد و اصطلاحا دیتا رو کش کرد. ــ ساناز رضایی در 6 سال قبل |
||
1 | @ساناز.رضایی نکته هوشمندانه (و گاها کاربردی) هست استفاده از انجین memory برای نگهداری دیتا روی رم. ولی خب نکته اینجاست که «کش کردن» فقط به معنای نگهداری دیتا بر روی Ram سرور نیست که؛ اره درسته اغلب توی Ram کش میکنن دیتا رو، ولی خب استفاده کلاس Cache در لاراول این اجازه رو به شما میده که انتخاب کنی میخوای روی Ram کش کنی، یا توی فایل! همینطور این کمک رو میکنه که وقتی به دیتا نیازی نداشتی از روی Ram حذفش کنی و بیخودی Ram رو اشغال نگه نداری، در حالی که انجین memory همیشه و در همه حالات روی Ramه! ــ سجاد شفی زاده |