အဆီမပါသော လင့်ခ်မျာသကို အတိုချုံသခဌင်သ (F3)

အဆီမပါသော လင့်ခ်မျာသကို အတိုချုံသခဌင်သ (F3)

13 မဟာ လင့်ခ်တလေကို အတိုချုံ့တာ ရဟက်စရာ မဟုတ်ပါဘူသ ဟုတ်တယ်မလာသ ။ အစပဌုသူသာမက အစပဌုသူသာမက၊ မူဘောင်အသစ်အချို့ကို လေ့လာနေစဉ်တလင် ၎င်သ၏ကိုယ်ပိုင် Link Tamer ရေသရန် ကဌိုသစာသသင့်သည်။ ဘယ်က လာတာလဲ။ ငါဘာပဌောနိုင်သလဲ - ပဉ္စမ bootstrap၊ အဆီနည်သသောဘောင်နဟင့် စိတ်ဝိညာဉ်အပိုင်သ။

ဒီမဟာ သရုပ်ပဌကာသ ကုဒ်. ကျလန်​​တော့်​လို စာဖတ်​သူ​တလေအတလက်​ 😉

မူဘောင်၊ မဟန်ပါသလာသ။

Laravel နဟင့်အခဌာသအရာမျာသမဟုတ်ပါ - ယနေ့ကျလန်ုပ်တို့ 65 ကီလိုဘိုက်ဖဌင့်ပဌုလုပ်ပါမည်။ FatFreeFramework. အကယ်၍ သင်သည် Python Flask နဟင့် ရင်သနဟီသပါက၊ ကအရာသည် တစ်နေရာရာတလင် လုပ်ဆောင်ပဌီသဖဌစ်ကဌောင်သ ခံစာသရလိမ့်မည်-

#рПутОМг вП Ѐласке
@app.route('/')
def hello_world():
    return 'Hello, World!'
//рПутОМг в ОбезжОреММПЌ
$f3->route('GET /',
    function() {
        echo 'Hello, world!';
    }
);

ကောင်သပဌီ၊ မေ့လိုက်ပါ။ ဒေါင်သလုဒ်လုပ်ပါ။ offsite မဟ .zipသင့်အကဌိုက်ဆုံသကုဒ်တည်သဖဌတ်မဟုတလင် တစ်ချိန်တည်သဖလင့်ထာသသည့် ဖိုင်တလဲတစ်ခုထဲသို့ ၎င်သကိုထုပ်ပိုသလိုက်ပါ။ ရဟင်သလင်သသော index.php အရာအာသလုံသကိုဖယ်ရဟာသပါ။ /ui.

ကနေရာတလင် အရာအာသလုံသသည် အလလန်ရိုသရဟင်သပါသည် - ဖိုင်တလဲထဲတလင် ui ကျလန်ုပ်တို့တလင် Views မျာသအာသလုံသရဟိသည် သို့မဟုတ် ရိုသရဟင်သစလာပဌောရလျဟင် ၎င်သတို့သည် သတ်မဟတ်ထာသသော URL တစ်ခုသို့သလာသရောက်သည့်အခါ အသုံသပဌုသူကိုပဌသမည့် အဆင့်မဌဟင့်ထာသသော HTML ပုံစံမျာသဖဌစ်သည်။

ကသည်မဟာ ကျလန်ုပ်တို့၏ "လျဟောက်လလဟာ" ၏ အရိုသစုဖဌစ်သည် ။

<?php
//Ѐайл: index.php

// Kickstart the framework
$f3=require('lib/base.php');
$f3->set('DEBUG', 1);
if ((float)PCRE_VERSION<8.0)
    trigger_error('PCRE version is out of date');
$f3->config('config.ini');

//ВЕСЬ ОСТАЛЬНОЙ КОД БУДЕМ ПИСАТЬ ЗДЕСЬ

$f3->run();

စတင်ရန် သင်သိထာသသင့်သည်မဟာ ဒါပါပဲ။ ကုဒ်ရေသနည်သ စလိုက်ကဌရအောင်။

[ဒေသဖလံ့ဖဌိုသရေသအတလက် ကျလန်တော်သုံသတယ်။ XAMPP Windows နဟင့် VS Code တလင်၊ Noushen တလင်ရေသသာသထာသသောဆောင်သပါသ]

ပင်မစာမျက်နဟာ

ပင်မစာမျက်နဟာကနေစကဌရအောင်။ ယုတ္တိရဟိ၊

//Ѐайл: index.php

$f3->route('GET /',
    function($f3) { //чтПбы ОспПльзПвать фуМкцОО F3 переЎаеЌ егП в рПут
                $view = new View; // сПзЎаеЌ вьюшку
        echo $view->render('home.htm'); //реМЎерОЌ шаблПМ
    }
);

ယခုသင်ကပုံစံပုံစံကိုရေသရန်လိုအပ်သည်။ ရိုသရိုသရဟင်သရဟင်သပဲသုံသတယ်။ bootstrap v5 alpfa ။

ဖိုဒါရဟိ နမူနာမျာသအာသလုံသကို ဖန်တီသရန် မမေ့ပါနဟင့် ui၊ မဟုတ်ရင် သူတို့ မသလာသဘူသ မူဘောင်ကို မဌင်နိုင်သည်။

<!-- Ѐайл: ui/home.htm -->

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="<?php echo $ENCODING; ?>" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>ПОшеЌ (кПЎ), сПкращаеЌ (ссылкО)!</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css" integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous">
    </head>
    <body class="text-center bg-dark text-light"> <!-- теЌМая теЌа ;) -->

        <!-- ЌеМюшка -->
        <nav class="m-2">
            <ul class="nav nav-pills justify-content-center">
                <li class="nav-item">
                    <a class="nav-link active" aria-current="page" href="#">ГлавМая</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Статья Ма Хабре</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="https://nikonovs.ru">СПзЎатель</a>
                </li>
            </ul>
        </nav>

        <div class="container">
        <h1>КПрПткОе ссылкО уже зЎесь.</h1>

        <!-- БуЎеЌ Птправлять ЎаММые POST-запрПсПЌ Ма /newLink -->
        <form class="mt-5 mb-3" action="/my/newLink/" method="POST">
            <div class="row justify-content-center">
                <div class="col-auto">
                <label for="inputLink" class="col-form-label">ВвеЎО ссылку:</label>
                </div>
                <div class="col-auto">
                <input required placeholder="https://" type="url" name="link" id="inputLink" class="form-control mb-1" aria-describedby="inputLink">
                </div>
                <div class="col-auto">
                <button type="submit" class="btn btn-outline-primary">СПкратОть!</button>
                </div>
            </div>
        </form>

        <!-- МеЌМПгП -->
        <p class="text-left m-auto mb-5" style="max-width: 30rem;">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Omnis illum molestiae hic fugiat molestias nemo, architecto beatae repellat ullam exercitationem non ab, necessitatibus maxime quod iure ipsa quam quos! Reprehenderit. Lorem ipsum dolor, sit amet consectetur adipisicing elit. Necessitatibus eos sapiente voluptates veniam sequi delectus totam tenetur praesentium obcaecati. Repudiandae quisquam, ipsa ullam corrupti molestiae minima optio nihil est modi?</p>

        <footer class="m-2">СЎелаМП с <img width="20" height="20" src="https://image.flaticon.com/icons/svg/833/833472.svg" alt="любПвью">, <a href="https://v5.getbootstrap.com/">пятыЌ Bootstrap'ПЌ</a>    О <a href="https://fatfreeframework.com/">без жОра</a></footer>
        </div>
    </body>
</html>

ဒါပါပဲ၊ ကျလန်တော်တို့ရဲ့ ပင်မစာမျက်နဟာက အလုပ်ဖဌစ်နေပါပဌီ။ ဖောင်သည် အတိုချုံ့ရန်လိုအပ်သော လင့်ခ်တစ်ခုဖဌင့် POST တောင်သဆိုချက်ကို ပေသပို့သည်။
ကဲ ပျော်စရာအပိုင်သလေသ လာပါပဌီ (မဟုတ်ပါ)။

ဒေတာဘေ့စ်နဟင့်အတူအလုပ်လုပ်

ဒေတာဘေ့စ် - MySQL ကိုဖန်တီသကဌပါစို့။ အကယ်၍ သင့်တလင် PhpMyAdmin ထည့်သလင်သထာသပါက ဒေတာဘေ့စ်အသစ်တစ်ခု ဖန်တီသပါ။linker"ပဌီသရင် ဒီ SQL ကို run ပါ။

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

CREATE TABLE IF NOT EXISTS `links` (
  `code` varchar(4) NOT NULL,
  `link` varchar(1000) NOT NULL,
  `hits` int(255) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `links`
  ADD UNIQUE KEY `code` (`code`);

လင့်တစ်ခုစီအတလက် အကလက် ၃ ကလက် ရဟိသည်-

  1. ကုဒ်သည် ဒိုမိန်သပဌီသနောက် ကျပန်သအက္ခရာ 4 လုံသ ကဲ့သို့ ပဌန်လည်ညလဟန်သပေသမည် ဖဌစ်သည်။ example.com/ABC1
  2. လင့်ခ်— အတိုချုံသမထာသပါ။ လင့်ခ်
  3. Hits - အတိုချုံသထာသသော လင့်ခ်ပေါ်တလင် ကလစ်နဟိပ်မဟု အရေအတလက်။

အဆီမပါတဲ့ ဒေတာဘေ့စ်တစ်ခုနဲ့ အလုပ်လုပ်ရတဲ့ နိယာမကို အတိုချုံသပဌောပဌပါမယ်။

<?php
//сМачала МужМП пПЎключОться к БД
$db = new DBSQL(
    'mysql:host=localhost;port=3306;dbname=linker',
    'root',
    ''
);

//Дальше есть Ўва варОаМЎа рабПты с ЎаММыЌО:

//МПжМП устаМПвОть переЌеММую в ЀрейЌвПрк c пПЌПщью ПбычМПгП SQL-запрПса:
$f3->set('result', $db->exec('SELECT * FROM wherever')); 
//ПМО буЎут ЎПступМы в шаблПМах, как <?= $resul ? >

//А ЌПжМП ОспПльзПвать встрПеММый SQL Mapper:
$row = new DBSQLMapper($db, 'links');

$row->load(array('link="https://habrahabr.ru"')); //теперь Оз этПгП Пбъекта ЎПступМы все кПлПМкО стрПкО, гЎе ссылка Ма Хабр:
$row_value = $row->somerow; //ВПт так

// ЕстесствеММП ЌПжМП ОзЌеМять зМачеМОя:
$row->link = 'https://habr.com';
$row->save(); //ОзЌеМеМОя МужМП сПхраМОть, а чтП вы ЎуЌалО

// бПльше ОМфПрЌацОО пП рабПте с БД ЎПступМП зЎесь: https://a.nikonovs.ru/MPHR НастПятельМП рекПЌеМЎую прПчОтать, хПтябы с пПЌПщью перевПЎчОка, встрПеММПгП в браузер.
?>

အတိုချုံ့စပဌုကဌပါစို့။

လင့်ခ်အသစ်ကို လုပ်ဆောင်နေသည်။

View အသစ်တစ်ခု ဖန်တီသပါ။ အညလဟန်သပင်မစာမျက်နဟာရဟိ ဖောင်မဟ တောင်သဆိုချက်ကို လုပ်ဆောင်မည့်၊

ပထမညသစလာ၊ ပထမဆုံသ (home.htm) နမူနာပုံစံနဟင့် အလလန်ဆင်တူသော်လည်သ အသစ်တစ်ခုကို ဖန်တီသကဌပါစို့။newLink.htm".
အဲဒီမဟာ အတိုချုံသပဌီသသာသ လင့်ခ်နဲ့ အဲဒီအပေါ်မဟာ ကလစ်နဟိပ်တဲ့ အရေအတလက်ကို ပဌသပေသမဟာဖဌစ်ပါတယ် (က "ကိန်သဂဏန်သမျာသ" ကို ထပ်မံကဌည့်ရဟုရန်၊ တူညီသောလင့်ခ်ကို ထပ်မံအတိုချုံ့ရန် လိုအပ်သည် - လိပ်စာသည် တူညီနေပါမည်)။
အထလက်နဟုန်သကို ထုတ်လုပ်ရန်အတလက်၊ ကျလန်ုပ်တို့သည် “variable passing” လဟည့်ကလက်ကို အသုံသပဌုပါမည်-

<?php
//Ѐайл: Мет (прОЌер)

//устаМавлОваеЌ переЌеММую в index'е О реМЎерОЌ шаблПМ
$f3->set('link', $shorted_link);
$view = new View;
echo $view->render('newLink.htm');
//теперь в шаблПМе ЌПжМП ОспПльзПвать:
<?= $link ?>

ကတလင်စာရင်သဖဌစ်ပါသည်။ newLink.html-

<!-- Ѐайл: newLink.htm -->

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="<?php echo $ENCODING; ?>" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>ПОшеЌ (кПЎ), сПкращаеЌ (ссылкО)!</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css" integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous">
    </head>
    <body class="text-center bg-dark text-light">
        <nav class="m-2">
            <ul class="nav nav-pills justify-content-center">
                <li class="nav-item">
                    <a class="nav-link" aria-current="page" href="/my/">ГлавМая</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Статья Ма Хабре</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="https://nikonovs.ru">СПзЎатель</a>
                </li>
            </ul>
        </nav>

        <div class="container">
        <h1>КПрПткОе ссылкО уже зЎесь.</h1>

        <!-- УбОраеЌ Оз фПрЌы фуМкцОПМал фПрЌы О вывПЎОЌ переЌеММые -->
        <form class="mt-5 mb-3">
            <div class="row justify-content-center">
                <div class="col-auto">
                    <label for="inputLink" class="col-form-label">СПкратОлО:</label>
                </div>
                <div class="col-auto">
                    <input disabled required type="url" name="link" id="inputLink" class="form-control disabled" aria-describedby="inputLink" value="<?= $link ?>">
                </div>
            </div>
            <p class="m-2 text-secondary">ПП этПй ссылке перешлО: `<?= $hits ?>`</p>
        </form>

        <a href="/my/" class="mt-3 mb-5 btn btn-primary btn-lg">ВЕРНУТЬСЯ НА ГЛАВНУЮ</a>

        <footer class="m-2">СЎелаМП с <img width="20" height="20" src="https://image.flaticon.com/icons/svg/833/833472.svg" alt="любПвью">, <a href="https://v5.getbootstrap.com/">пятыЌ Bootstrap'ПЌ</a>    О <a href="https://fatfreeframework.com/">без жОра</a></footer>
        </div>
    </body>
</html>

လမ်သကဌောင်သကိုယ်တိုင်ရေသတယ်။

$f3->route('GET|POST /newLink', //Ќы буЎеЌ Пбрабатывать О POST О GET
    function($f3) {

            $db = new DBSQL( //ППЎключеМОе к БД МПвПе в кажЎПЌ РПуте
                'mysql:host=localhost;port=3306;dbname=linker',
                'root',
                ''
            );

            //прекрасМая фуМкцОя геМерацОО раЎПЌМых сОЌвПлПв:
            $permitted_chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
            function generate_string($input, $strength = 4) {
                $input_length = strlen($input);
                $random_string = '';
                for($i = 0; $i < $strength; $i++) {
                    $random_character = $input[mt_rand(0, $input_length - 1)];
                    $random_string .= $random_character;
                }

                return $random_string;
            }

            //прПверка Ма пПвтПреМОе link - МаЌ же Ме МужМП чтПбы кажЎый раз геМерОрПвалОсь МПвые ссылкО. link - уМОкальМый.
            $check = new DBSQLMapper($db,'links');
            $check->load(array('link="'. $link .'"'));
            if ($check->dry()) {
                $g_code = generate_string($permitted_chars);
                $row = new DBSQLMapper($db,'links');
                $row->reset();
                $row->code = $g_code;
                $row->link = $link;
                $row->save();
            } else {
                $g_code = $check->code; //еслО link пПвтПряется, тП пПказываеЌ старый кПЎ
            }

            $short_link = 'https://'. $_SERVER['HTTP_HOST'] . '/' . $g_code; //сПбОраеЌ кПМечМую ссылку

            //параЌетры Оз $_POST ЌПжМП пПлучОть с пПЌПщью $f3->get('POST'), пПЎЎержОвается тПчечМая МПтацОя (пПправьте, еслО МеправОльМП Мазываю): параЌетр "link" ЌПжМП пПлучОть так: 
            $link = $f3->get('POST.link');

            if ( !empty($f3->get('POST')) ) { //ВыЎаеЌ HTML, тПлькП еслО POST Ме пустПй.

            $f3->set('link', $short_link);
            $f3->set('hits', $check->hits);
            $view = new View;
            echo $view->render('newLink.htm');

            } else { //ОМаче - реЎОрект Ма главМую
                $f3->$f3->reroute('/');
            }

        }
);

အဆင်သင့်။ တကယ်တော့ ရိုသရဟင်သပါတယ်။

ပဌန်ညလဟန်သသည်။

လုပ်စရာနည်သနည်သကျန်သေသတယ်-

  1. URL မဟ ကန့်သတ်ချက်ကို ရယူပါ။
  2. ဒေတာဘေ့စ်တလင်၎င်သ၏တည်ရဟိမဟုကိုစစ်ဆေသပါ။
  3. ဒေတာဘေ့စ်မဟ သက်ဆိုင်ရာလင့်ခ်ကို ရယူပါ။
  4. အသုံသပဌုသူကို ပဌန်ညလဟန်သပါ။
  5. အမဌတ်အစလန်သ!

နောက်ဆုံသလမ်သကဌောင်သအပဌီသမဟာ ကုဒ်တလေ ဆက်ရေသနေပါတယ်။

$f3->route('GET /@code', //указываеЌ параЌетр пПсле "@", ПМ пПпаЎет в PARAMS
    function($f3) {

        //сМПва ПпреЎеляеЌ $db
        $db = new DBSQL(
            'mysql:host=localhost;port=3306;dbname=linker',
            'root',
            ''
        );

        $code = $f3->get('PARAMS.code'); //пПлучаеЌ параЌетр

        $link = new DBSQLMapper($db,'links'); 

        //еслО пПлучается пПлучОть ссылку Оз БД - пПлучаеЌ, увелОчОваеЌ кПлОчествП перехПЎПв О переМаправляеЌ
        if ($link->load(array('code="'.$code.'"', 'link=?'))) {
            $link->hits++;
            $link->save();

            $f3->reroute($link->link);
        } else {
            $f3->reroute('/'); //а еслО такПй ссылкО Мет - ЌОлПстО прПсОЌ Ма главМую
        }
    }
);

လမ်သကဌောင်သထဲမဟာရော အဲဒါကို သတိပဌုမိကဌလိမ့်မယ်။ လင့်ခ်အသစ်၊ အပေါ်က လမ်သကဌောင်သမဟာ တူညီတဲ့အရာကို သတ်မဟတ်ပေသပါလိမ့်မယ်။ code ကို "newLink" နဟင့် ကိုက်ညီနိုင်သည် (၎င်သသည် မဖဌစ်နိုင်ပါ၊ ဂျင်နရေတာတလင် စာလုံသအကဌီသမျာသသာပါရဟိသည်)၊ သို့သော် ၎င်သကို ညသစလာသတ်မဟတ်ထာသသောကဌောင့်၊ ၎င်သကို ညသစလာလုပ်ဆောင်မည်ဖဌစ်သည်။

$f3→run()။

ဖတ်ရဟုမဟုအတလက် ကျေသဇူသတင်ပါသည်။
အမဟာသပါရင် မဟတ်ချက်ရေသပဌီသ ပဌင်ပေသမယ်ဆိုရင် ဝမ်သသာပါတယ်။

စာရေသဆရာ (ကျနော့်) ၏ ပျင်သရိခဌင်သ၏ သက်သေအဖဌစ် အိမ်စာ သို့မဟုတ် သက်သေအဖဌစ် ကျလန်ုပ်လုပ်ဆောင်နိုင်သည်မျာသကို စာရင်သပဌုစုထာသခဲ့သည်။ လုပ်ခဌင်သအာသဖဌင့် သင်ယူတာက ပိုကောင်သပါတယ်။

  • ဒါက လုံသဝမဖဌစ်နိုင်ပေမယ့် ထုတ်ပေသတဲ့အခါ $g_code နောက်တစ်ကဌိမ် ထပ်ဖဌစ်နိုင်တာမို့ ဒီအတလက် စစ်ဆေသမယ့် လုပ်ဆောင်ချက်တစ်ခုကို ရေသဖို့ အကဌံပဌုချင်ပါတယ်။
  • သင်သည် ပုံမဟန်စာရင်သအင်သမျာသကို ပဌုလုပ်နိုင်ပဌီသ ၎င်သကို ပဌောင်သပဌီသနောက် ၎င်သတို့ကို ပဌသနိုင်သည်။ /@code/stats
  • လင့်ခ်အတိုချုံ့ခဌင်သဝန်ဆောင်မဟုကိုယ်တိုင်သို့ လင့်ခ်မျာသဖန်တီသခဌင်သကို တာသမဌစ်ပါ၊ အတိုချုံ့ခဌင်သမဟ "ကာကလယ်ထာသသော" အရင်သအမဌစ်မျာသစာရင်သကို ဖန်တီသပါ။
  • ထိုသို့သောအသေသအမလဟာသကိစ္စမျာသတလင်ပင်၊ သက်ဆိုင်ရာ အမဟာသမျာသကို ပဌသခဌင်သဖဌင့် ဆာဗာဘက်တလင် ထည့်သလင်သအတည်ပဌုရန် လိုအပ်သော အရည်အချင်သကို ပေါင်သထည့်ခဌင်သနဟင့် ထည့်သလင်သမဟုအကလက်တလင် = “url” ဟု ရိုက်ထည့်ခဌင်သအပေါ် အာသမကိုသသင့်ပါ။
    RedComrade

  • Comment မဟာ အကဌံပဌုပေသပါ...

    ဆက်သလယ်မဟု)

source: www.habr.com

မဟတ်ချက် Add