سوال در مورد فانکشن ها در پلاگ نویسی الکسیر و فونیکس

درود خدمت شما دوستان گرامی . من یک پلاگ ساده نوشتم برای خودم به شرح زیر

	def init(_params) do
		
	end

	def call(conn, params) do
		# assign(conn, :user_ip_checked, params)
		ip = to_string(:inet_parse.ntoa(conn.remote_ip))
		user_banned_ip = case RedisQuery.get_all_fields_from_record("ip", ip) do
			[[]]  	-> 
				assign(conn, :user_ip_checked, params)
			_ 		-> 
				conn
		        |> put_status(403)
		        |> json(%{error_code: "403", error_msg: "your IP is banned, please try again later."})
		        |> halt()
		end
		user_banned_ip
	end

یک چندتا سوال داشتم :

دقیقا فانکشن init چی هست ؟ چه کاری رو انجام می ده . یک جا خوندم برای اعمال تنظیمات اون هم برای یک بار پر می شه ولی call همیشه در حال محاسبه هست و … یا بد ترجمه کردم یا بد فهمیدمش .

ما همه کد های پلاگ مون رو در call می نویسیم و اونجا اصل کد رو فراخوانی می کنیم ولی init چه کاربردی دارد ؟ در چند پلاگ ساده دیده بودم این بخش init تقریبا هیچ کاری در اون انجام داده نمی شد

با تشکر

منابع :
https://hexdocs.pm/phoenix/plug.html

init یک callback که در زمان compile فراخوانی میشه و plug زیر درخت supervision ثبت میشه init ارگمنت دوم call به عنوان ارگمنت میگیره

تمامه worker ها که زیردرخت supervision هستند باید init داشته باشن

1 پسندیده

درود سام عزیز تشکر از پاسخت .

آیا باید init حتما چیزی رو برگشت بده یا مثل کد بنده که خالی هست و params رو با _ قرار دادم مشکلی ایجاد نمی کنه؟
قطعه کد ساده ای که در init باشه سام عزیز دارید مثلا چه چیزی رو می شه در اون کاربردی قرار داد ؟

لازم نیست چیزی باشه بعضی وقت ها validation opts اینجا میگذارن ولی خالی باشه خوبه

1 پسندیده

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

به عنوان مثال من خودم فکر می کنم مثلا اگر بخوام مثلا تمام اطلاعات یک پلی لیست اکانت از یوتیوب رو بگیرم بهتر است یک فانکشن خوب بنویسم تا اینکه یک پلاگ بنویسم آیا شما هم همین نظر رو دارید ؟ فکر کنم اگر چنین کاری رو با پلاگ کنم شاید در برنامه هم تاثیر منفی بزاره درسته ؟

اگر می شه دلایلتون بگید ممنون می شم . قبلا @samdvr عزیز یک عکس در پست ها قرار داده بود که اولیت هارو در فونیکس نشون می داد نظرمو نسبت به اون پست مطرح کردم

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

پلاگ فقط موقعی استفاده کن که یک کاری میخواهی روی تمام درخواست ها انجام بشه
Json parsing …
مورد که گفتی با فانکشن معمولی راه بهتریه

1 پسندیده