مدیریت فنی پکیج‌ها

در جالنو برای مدیریت فنی پکیج‌ها کلاس packages\base\Packages ایجاد شده است. در این کلاس امکان ثبت پکیج، فعال کردن زبان در پیکج، دسترسی به تمامی پکیج‌های فعال و همچنین دسترسی به هر پکیج بطور مجزا ایجاد شده است.

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

در کلاس Packages .متدهای زیر تعریف شده است متدها برای سهولت استفاده بصورت استاتیک تعریف شده‌اند

متد کاربرد
package(string $name): ?Package دسترسی به پکیج‌
get(?array $names): array دسترسی به تمامی پکیج‌های فعال
register(Package $package) ثبت پکیج
registerTranslates(string $code) فعال سازی زبان در پکیج

دسترسی به پکیج‌ها

در کلاس Packages متد‌های package و get برای دسترسی به پکیج‌ها تعریف شده‌اند.

با فراخوانی متد package می‌توانید به هر یک از پکیج‌های فعال تعریف شده در پروژه دسترسی داشته باشید. خروجی این متد درصورتی که پکیج مشخص شده موجود باشد شئ از کلاس packages\base\Package میباشد که حاوی مشخصات پکیج مانند پکیج‌های وابسته ، فایل مسیریاب ،فایل‌های مترجم و بطور کلی تمامی تنظیماتی که در فایل ساختار پیکج (package.json) تنظیم شده است می‌باشد.

درصورتی که پکیج مشخص شده موجود نباشد استثنا‌packages\base\IO\NotFoundException پرتاب می‌شود.

use packages\base\Packages;

$package = Packages::package("packagename");

نمونه فایل package.json

{
    "permissions": "*",
    "routing": "routing.json",
    "frontend": "frontend",
    "autoload": {
        "directories": ["controllers", "Models", "listeners", "events"]
    },
    "dependencies": ["userpanel"],
    "languages":{
        "fa_IR": "langs/fa_IR.json",
        "en_US": "langs/en_US.json"
    },
    "events": [
        {
            "name": "packages/userpanel/events/usertype_permissions_list",
            "listener": "listeners/settings/usertypes/Permissions@list"
        }
    ],
    "upload_path": "storage/public/upload/"
}

نمونه فایل کنترلر و دسترسی به اطلاعات پکیج

<?php
namespace packages\packagename\controllers;

use themes\themename\views;
use packages\base\{Controller, Response, View, Packages, IO\File};

class Albums extends Controller {

    public function insertImg(): Response {

        $view = view::byName(views\Albums\InsertImg::class);
        $this->response->setView($view);

        if (Http::is_post()){
            $inputs = $this->checkinputs([
                'img' =>[
                    'type' => 'image',
                    "max-size" => 2097152 // Byte
                    "obj" => true,
                    "extension" => array('jpeg', 'jpg']
                ]
            ]);

            $package = Packages::package('packagename');

            $path = $package->getOption("upload_path") . $inputs['img']->getFile()->md5() . '.' . $inputs['img']->getExtension();

            $img = $package->getFile($path);

            $directory = $img->getDirectory();
            if (!$directory->exists()) {
                $directory->make(true);
            }

            $inputs['img']->saveToFile($img);
        }

        $this->response->setStatus(true);
        return $this->response;
    }
}

متد get برای دسترسی به تمامی پکیج‌های فعال تعریف شده است. خروجی متد get آرایه‌ای از شئ‌های کلاس Package میباشد. میتوانید به آرگومان ورودی متد get آرایه‌ای از نام پکیج‌های مورد نیاز را بدهید در اینصورت خروجی متد آرایه‌ای از پکیج‌های خواسته شده میباشد.

use packages\base\Packages;

Packages::get();

Packages::get(["my_package", "PhpParser"]);

ثبت پکیج

متد register برای ثبت پکیج ایجاد شده است. این متد زمانی که فرمورک پکیج‌ها را پیمایش و لود میکند توسط کلاس packages\base\Loader استفاده میشود. ورودی این متد شئ از کلاس packages\base\Package میباشد.

فعال کردن زبان پکیج

متد registerTranslates کد زبان کامل را گرفته و فایل های ترجمه ی پکیج‌ها با آن کد زبان را خوانده و فعال میکند. کد زبان میتواند زبان پیشفرض، زبان فعال و یا زبان دلخواه باشد.

از متد registerTranslates نیز زمان لود و ثبت پکیج‌ها در کلاس packages\base\Loader استفاده میشود.

use packages\base\Packages;

Packages::registerTranslates("en_US");