مجید مدیر فنی یک استارتآپ است. او در راستای افزایش تعداد مشتریان، میخواهد سایتشان را چندزبانه کند. او ساختار فایلهای PO را نمیپسندد؛ بنابراین ساختار جدیدی ارائه داده تا با استفاده از آن بتوان سایت را چندزبانه کرد. از شما میخواهیم بخش ترجمهی جملات بر اساس ساختاری که مجید ارائه داده است را پیادهسازی کنید.
مجید برای متن ترجمهها، یک آرایهی انجمنی در نظر گرفته که کلیدهای آن، کد زبانهای مختلف و مقادیر متناظر با آنها، آرایههایی انجمنی شامل نگاشتی از جملات با زبان مبدأ به زبان مقصد هستند. نمونهای از یک آرایه شامل ترجمهها بهصورت زیر است:
تابعی با نام getTranslation
پیادهسازی کنید که به ترتیب آرایهی ترجمهها، کد زبان و جملهی ورودی را دریافت کرده و متن ترجمهشده را برگرداند. اگر جملهی ورودی در آرایهی ترجمهها موجود نبود، همان متن ورودی را برگردانید.
امضای تابع getTranslation
بهصورت زیر خواهد بود:
خروجی مورد انتظار:
یک فایل PHP که تابع getTranslation
در آن پیادهسازی شده است آپلود کنید.
نیما در شرکت کدنویسگستران شرق بهجز حسن مشغول به کار است. او فردی مینیمالیست است و از کتابخانههای بزرگ و پیچیدهی PHP متنفر است. در حال حاضر، تیم کدنویسگستران شرق بهجز حسن از موتور قالب Smarty استفاده میکند. این موتور قالب از نظر نیما بسیار بزرگ و پیچیده است. او تصمیم گرفته تا موتور قالب سادهای با نام Smarties بسازد تا در پروژههای بعدیشان از آن استفاده کنند.
از شما میخواهیم Smarties را برای نیما پیادهسازی کنید.
پروژهی اولیه را از این لینک دانلود کنید.
SmartiesFilter
🔗اسمارتیز همانند سایر template engine ها امکان اعمال فیلتر روی مقادیر را داراست. البته، این فیلترها هیچ آرگومانی بهجز مقدار فعلی ندارد. همهی فیلترهای اسمارتیز اینترفیس SmartiesFilter
را پیادهسازی میکنند. این اینترفیس تنها شامل متدی با نام apply
است که متن ورودی را دریافت کرده و پس از اعمال تغییرات، متن نهایی را برمیگرداند.
SmartiesFilterFactory
🔗وظیفهی این کلاس، تبدیل یک تابع به آبجکتی از SmartiesFilter
است. این کلاس شامل متدی static به نام create
است که یک تابع را به شکل نام تابع یا anonymous function دریافت کرده و یک آبجکت از نوع SmartiesFilter
برمیگرداند که عملکرد متد apply
آن دقیقاً مطابق با تابع ورودی است.
اگر آرگومان ورودی نامعتبر بود (قابل فراخوانی نبود)، یک InvalidArgumentException
با متن پیغام filter must be callable
throw کنید.
توجه: برای پیادهسازی متد create
، مجاز به ایجاد کلاس جدید (کلاسی که anonymous نباشد) در برنامه نیستید.
Smarties
🔗این کلاس، کلاس اصلی اسمارتیز است. این کلاس شامل متدهای زیر است:
addFilter($name, $filter)
: این متد، یک فیلتر با نام $name
را به فیلترها اضافه میکند. موارد زیر را برای پیادهسازی این متد در نظر داشته باشید:SmartiesFilter
نباشد، باید یک InvalidArgumentException
با متن پیغام filter must implement SmartiesFilter
throw کنید.render($filepath, $parameters)
: این متد، نام فایل قالب ورودی و آرایهای انجمنی از پارامترها دریافت میکند و رشتهی خروجی را برمیگرداند. موارد زیر را برای پیادهسازی این متد در نظر داشته باشید:$filepath
موجود نباشد، باید یک Exception
با متن پیغام input file not exist
throw کنید.Exception
با متن پیغام parameter "$parameterName" not provided
throw کنید ($parameterName
نام پارامتر است).Exception
با متن پیغام filter "$filter" does not exist
throw کنید ($filter
نام فیلتر است).a
و A
بهصورت همزمان به این متد داده نمیشود.پارامترها در قالب بهصورت زیر نوشته میشوند:
برای اعمال فیلتر نیز از کاراکتر |
استفاده میشود. میتوان یک یا چند فیلتر را بر روی یک پارامتر اعمال کرد:
فیلترها باید بهترتیب از چپ به راست روی پارامتر اعمال شوند.
با اجرای اسکریپت index.php
موجود در پروژهی اولیه، خروجی باید بهصورت زیر باشد:
فایلهای Smarties.php
و SmartiesFilterFactory
را Zip کرده و آپلود کنید.
همانطور که میدانید، در لاراول عملیات ورود بهصورت پیشفرض توسط ایمیل و رمز عبور انجام میشود. در این سؤال شما باید این فرآيند را طوری تغییر دهید که کاربر بتواند علاوه بر ایمیل با شماره موبایل نیز وارد شود.
در این پروژه از Laravel 8 استفاده شده است.
پروژهی اولیه را از این لینک دانلود کنید.
برای اجرای پروژه، باید php
و composer
را از قبل نصب کرده باشید.
composer install
را در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید.پس از آن، میتوانید با دستور php artisan migrate
مایگریشنها را اجرا کنید.
users
که شماره موبایل در آن ذخیره میشود phone
است.email
و از طریق متد POST ارسال میشوند.09xxxxxxxxx
و ایمیلها به فرمت[ترکیبی از حروف انگلیسی و .]@[وبسایت بدون www]
هستند و کاربر با هیچ حالتی غیر از این فرمتها نباید اجازه ورود پیدا کند.
app
هستید.پس از اعمال تغییرات، کل پروژه به غیر از پوشهی vendor
را Zip کرده و آپلود کنید.
توجه کنید که نام فایل Zip اهمیتی ندارد.
شما در این چالش باید سفری به اعماق لاراول داشته باشید و یک driver جدید برای اتصال به دیتابیس پیادهسازی کنید.
دیتابیس با نام quera.json
بهصورت فایل JSON در اختیار شما قرار داده شده است که دارای یک جدول به نام users است. وظیفهی شما در این سؤال این است که اتصالی با این دیتابیس برقرار کنید و اطلاعات داخل جدول users
را برگردانید.
quera.json
در این پروژه از Laravel 8 استفاده شده است.
پروژهی اولیه را از این لینک دانلود کنید.
برای اجرای پروژه، باید php
و composer
را از قبل نصب کرده باشید.
composer install
را در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید.پس از دریافت پروژه، در آدرس database/quera.json
دیتابیس را مشاهده خواهید کرد که اگر به فایل config/database.php
مراجعه کنید، خواهید دید که connection ای به نام json
وجود دارد که اتصال با این دیتابیس را فراهم میکند. حال وظیفه شما این است که این connection
با درایور json
را به هستهی لاراول اضافه کنید.
connection
حتماً باید json
باشد.پس از این که اتصال با دیتابیس را فراهم کردید، باید فقط کوئری select
آن را بهگونهای پیادهسازی کنید تا اطلاعات جدول users
را برگرداند. برای مثال، در کلاس app/Http/Controllers/HomeController.php
دو دستور به صورت زیر نوشته شده است:
این دستورات باید محتوای جدول users
را برگردانند.
توجه: نام جدول ورودی مهم نیست و باید همیشه محتوای جدول users
برگردانده شود.
توجه: شما تنها مجاز به اعمال تغییرات در پوشهی app
هستید.
پس از اعمال تغییرات، کل پروژه به غیر از پوشهی vendor
را Zip کرده و آپلود کنید.
توجه کنید که نام فایل Zip اهمیتی ندارد.
ابوالفضل در حال کار بر روی پروژهی جدید خود است و در این پروژه باید دائماً حواسش به مسیرهایی (routes) که در پروژه استفاده میکند باشد. از سوی دیگر، نباید از مسیرهای پیشفرضی که لاراول در اختیارش قرار داده است استفاده کند. حال، او از شما کمک خواسته تا در این پروژه به او کمک کنید.
در این پروژه از Laravel 8 استفاده شده است.
پروژهی اولیه را از این لینک دانلود کنید.
برای اجرای پروژه، باید php
و composer
را از قبل نصب کرده باشید.
composer install
را در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید.پس از دریافت پروژهی اولیه، شما باید هستهی لاراول را طوری تغییر دهید تا هر زمان resource controller ای با استفاده از دستور make:controller
ساخته شد، علاوه بر دارا بودن route های پیشفرض خود لاراول، دارای route ای به آدرس /details
باشد و همچنین به route پیشفرض create
آن /new
اضافه شود. دقت کنید که آدرس /details
پس از فراخوانی باید متد details
از همین کلاس را برگرداند.
برای فهم بهتر سؤال، به مثال زیر توجه کنید:
پس از اجرای دستور زیر در کنسول:
php artisan make:controller TagController -r
باید محتوای کلاس TagController
شامل موارد زیر باشد:
همچنین باید دارای route های زیر باشد:
resource controller
با هر نامی درست کار کند.app
و در صورت لزوم stubs
هستید.پس از اعمال تغییرات، کل پروژه به غیر از پوشهی vendor
را Zip کرده و آپلود کنید.
توجه کنید که نام فایل Zip اهمیتی ندارد.