This commit is contained in:
Abdussamed 2023-04-30 16:07:14 +03:00
parent 0221541099
commit a2264c982e
8 changed files with 300 additions and 199 deletions

View File

@ -141,7 +141,7 @@
} }
public function getAttribute($name) public function getAttribute($name)
{ {
return Request::staticInput($name); return $this->input($name);
} }
}; };
define("request", new Request(), false); define("request", new Request(), false);

View File

@ -3,7 +3,7 @@
include_once "Request.php"; include_once "Request.php";
include_once "Helpers.php"; include_once "Helpers.php";
function magicRoute($path) function magicRoute($path,$regexs = [])
{ {
$regex = []; $regex = [];
$names = []; $names = [];
@ -21,12 +21,17 @@
}else{ }else{
$magic = true; $magic = true;
$symbol = tstring::from($matched[2]); $symbol = tstring::from($matched[2]);
$regexng = "[^\/^?]+?";
if(isset($regexs[$symbol->raw()]))
{
$regexng = $regexs[$symbol->raw()];
}
if($symbol->endsWith("?")) if($symbol->endsWith("?"))
{ {
$symbol = $symbol->slice(0,-1); $symbol = $symbol->slice(0,-1);
$pattern = "([^\/^?]+?)?"; $pattern = "(".$regexng.")?";
}else{ }else{
$pattern = "([^\/^?]+?)"; $pattern = "(".$regexng.")";
} }
$regex[] = "\/". $matched[1] . $pattern . $matched[3]; $regex[] = "\/". $matched[1] . $pattern . $matched[3];
$names[] = $symbol; $names[] = $symbol;
@ -40,12 +45,7 @@
}; };
function validateMagicRoute($mroute, $path) function validateMagicRoute($mroute, $path)
{ {
if(is_string($mroute))
{
list($regex, $names) = magicRoute($mroute);
}else{
list($regex, $names) = $mroute; list($regex, $names) = $mroute;
}
$matches = tstring::from($path)->match($regex); $matches = tstring::from($path)->match($regex);
if($matches !== false) if($matches !== false)
{ {
@ -72,9 +72,9 @@
public static $errors = []; public static $errors = [];
public static $publics = []; public static $publics = [];
public static $current = null; public static $current = null;
public static function post($path, $callback) public static function post($path, $callback, $regexs = [])
{ {
$magic = magicRoute($path); $magic = magicRoute($path, $regexs);
$textPath = false; $textPath = false;
$type = "text"; $type = "text";
if($magic[2] == true) if($magic[2] == true)
@ -101,9 +101,9 @@
} }
Route::$errors[$code][$method] = $callback; Route::$errors[$code][$method] = $callback;
} }
public static function get($path, $callback) public static function get($path, $callback, $regexs = [])
{ {
$magic = magicRoute($path); $magic = magicRoute($path, $regexs);
$textPath = false; $textPath = false;
$type = "text"; $type = "text";
if($magic[2] == true) if($magic[2] == true)
@ -115,7 +115,7 @@
} }
$route = Route::from([ $route = Route::from([
"type" => $type, "type" => $type,
"path" => $path, "path" => $textPath,
"callback" => $callback, "callback" => $callback,
"method" => "get" "method" => "get"
]); ]);
@ -131,9 +131,9 @@
"method" => "get" "method" => "get"
]); ]);
} }
public static function any($path, $callback) public static function any($path, $callback, $regexs = [])
{ {
$magic = magicRoute($path); $magic = magicRoute($path,$regexs);
$textPath = false; $textPath = false;
$type = "text"; $type = "text";
if($magic[2] == true) if($magic[2] == true)
@ -210,7 +210,7 @@
} }
public string $type; public string $type;
public string $path; public $path;
public string $src; public string $src;
public $callback; public $callback;
public string $method; public string $method;
@ -233,7 +233,7 @@
case 'magic': case 'magic':
case 'text': case 'text':
$callback = $this->callback; $callback = $this->callback;
$callback(...$args); $callback(new Request(),...$args);
break; break;
case 'public': case 'public':
$callback = $this->callback; $callback = $this->callback;
@ -262,6 +262,7 @@
break; break;
} }
case "magic":{ case "magic":{
$t = validateMagicRoute($this->path,$url);
if($t === false) if($t === false)
{ {
return false; return false;

282
README.md
View File

@ -1,3 +1,281 @@
# microargist # microargist framework
microargist ## Rotaları belirlemek (Route)
```php
// '/' rotasına girildiğinde "hi" mesajı gösterir
Route::get("/", function($request){
Response::text("hi");
});
// '/' rotasına post gönderildiğinde "hi" mesajı gösterir
Route::post("/", function($request){
Response::text("hi");
});
// girilen sayfada "get" metoduna ait bir rota bulunmaz ise Page not found yazısı gösterir
Route::error("get",404, function(){
Response::text("Page not found");
});
// girilen sayfada "post" metoduna ait bir rota hata verirse Server eror yazısını gösteri
Route::error("post",500, function(){
Response::text("Server error !");
});
// Her hangi bir method ile any-request rotasına ulaşılırsa hi mesajı gösterir
Route::any("/any-request", function($request){
Response::text("hi");
});
/**
* /content/
* Rotasından sonra gelen tüm dosya istekleri için public klasöründe dosyayı gönderir
* /content/image.jpg dosyası istendiğnide (varsa) /public/image.jpg dosyasını verecektir
**/
Route::public("/content/",__DIR__."/public");
/**
* İsteği işler ve kaydedilen rotalardan birini seçer ve çalıştırır
*
* */
Route::Execute();
```
## İstekleri işlemek (Request)
```php
/**
* isteğin hangi method ile geldiğini söyler
* get, post, head gibi
**/
Request::method(); //--> get
/**
* URL içerisinde gelen verileri almak için get metodu kullanılır
**/
Request::get("redir"); //--> /login
/**
* post veri içerisindeki veriyi almak için post metodu kullanılır
**/
Request::post("username"); //--> john
/**
* get veya post veri içerisindeki veriyi almak için input metodu kullanılır
**/
Request::input("username"); //--> john
/**
* İsteklerin http başlık değerlerini almak için headers() metodu kullanılabilir
* Bu nginx, apache vs. sağlanılan tüm http başlıklarını verir
* */
Request::headers();
/**
* Request üzerinden oturum işlemleri yapılması gereken durumlarda session() methodu çağrılabilir bkz. Oturum işlemleri
* */
Request::session();
/**
* Request üzerinden çerez işlemleri yapılması gereken durumlarda cookie() methodu çağrılabilir bkz. Çerez işlemleri
* */
Request::cookie();
/**
* Ayrıca get veya post verilerine $request içerisinden direkt ulaşılabilir
* */
$request = new Request();
$request->no_data // null
$request->username // john
$request->password // Password
// Gönderilen verinin içerik tipini almak için contentType kullanılabilir
$request->contentType();
```
## İsteklere cevap vermek (Response)
```php
/**
* Dosya gönderme
**/
Response::File(__DIR__."/storage/input.xlsx");
/**
* Dosya gönderme (mimetype ile)
**/
Response::File(__DIR__."/storage/image.jpg","image/jpg");
/**
* Dosya indirmeye zorlama
**/
Response::Download(__DIR__."/storage/image.jpg");
/**
* Yazı iletme
**/
Response::Text("Hello !");
/**
* JSON veri iletme
**/
Response::Json([
"status" => "success",
"data" => []
]);
/**
* html formatında veri iletme
**/
Response::html("
<h2>Page title</h2>
");
/**
* Response code belirleme
**/
Response::Code(404);
Response::html("
<h2>Page not found</h2>
");
/**
* Blade işleyip html veri göndermek için
**/
Response::view("auth.register");
Response::view("auth.login",[
"status" => "Success !"
]);
/**
* Send işlevi verilen verinin türüne göre json veya text göndermenin kısayolunu sağlar
**/
Response::send("Merhaba !"); // text
Response::send(["data" => []]); // json
/**
* Kullanıcıyı farklı bir sayfaya yönlendirmek için Redirect kullanılabilir
**/
Response::Redirect("/");
Response::Redirect("/", 304);
```
## http başlıklarını işleme (RequestHeader)
```php
/**
* HTTP başlık verilerini alma
**/
Request::$header->get("accept"); // --> image/jpg,*/*
Request::$header->accept; // --> image/jpg,*/*
// veya aynı şekilde
$requestHeader = new RequestHeader();
$requestHeader->get("accept");
$requestHeader->accept;
/**
* Request HTTP başlık verilerini ayarlama
**/
Request::$header->set("content-type","text/plain; charset=utf8");
Request::$header->{"content-type"} = "text/plain; charset=utf8";
// veya aynı şekilde
$requestHeader = new RequestHeader();
$requestHeader->set("content-type","text/plain; charset=utf8");
$requestHeader->{"content-type"} = "text/plain; charset=utf8";
```
## Çerezleri işleme (RequestCookie)
```php
//Cookie ayarlama ve değiştirme
Request::$cookie->setAttribute("lang","tr");
Request::$cookie->lang = "tr";
//Cookie değerini ayarlama
$lang = Request::$cookie->getAttribute("lang");
$lang = Request::$cookie->lang;
//Cookie değerini ayarlama
Request::$cookie->removeAttribute("lang");
unset(Request::$cookie->lang);
//veya şe şekilde de kullanılabilir
$cookie = new RequestCookie();
$cookie->lang = "tr";
```
## Upload edilen dosyaları işleme (RequestFile)
```php
/**
* Upload edilen dosyayı kontrol etme
*/
Request::$file->hasFile("avatar"); // 1,2,3 or false
/**
* Kaç tane dosya olduğunu sorgulama
*/
Request::$file->count("avatar"); // 2
/**
* Dosyaları alma
*/
Request::$file->getFile("avatar"); // ["name","path","mime","error","size",...]
/**
* Dosyaları diske kaydetme
*/
Request::$file->save("avatar",__DIR__."/uploads/");
Request::$file->save("avatar",__DIR__."/uploads/", "hashfilename.jpg", 1); // avatar ismiyle gelen 2. dosyayı kaydet
Request::$file->getFile("avatar")[0]->save("avatar",__DIR__."/uploads/")
/**
* Tüm dosyaları diske kaydetme
*
* Aşağıdaki saveAll metodu avatar ismiyle gelen maximum 4 dosyayı uploads içerisine kaydeder
**/
Request::$file->saveAll("avatar",__DIR__."/uploads/", null, 4);
```
## Oturum kayıtları (Session)
```php
// Oturum için tutulacak dosuyaların diskteki yerini belirleme
// init işlevinden önce kullanılmalıdır
Session::path("./session");
// Oturum işlemleri için oturum başlatma
Session::init();
// Oturum verisini ayarlama
Session::set("loginned", true);
// Oturum verisini alma
Session::get("loginned"); // --> true
// Oturum verisini silme
Session::delete("loginned");
// Oturum verisini sorgulama
Session::has("loginned"); // false
// Oturum verisine sonuna ekleme yapmak (liste değişkenine)
Session::add("store_list",["desk","cap"]);
// Oturumda liste olarak tutulan veriden son veriyi almak
Session::pop("store_list"); // --> "cap"
// Oturum verisine başına ekleme yapmak (liste değişkenine)
Session::unshift("store_list","mouse");
// Oturum verisine başınden veri çıkarmak (liste değişkenine)
Session::shift("store_list"); // --> "desk"
```

View File

@ -1,8 +0,0 @@
<?php
Route::get("/",function(){
Response::view("topics.home");
});
Route::get("/deneme",function(){
Response::view("deneme");
});

View File

@ -1,17 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
<?php echo \htmlentities($title??'', ENT_QUOTES, 'UTF-8', false); ?>
</title>
</head>
<body>
<?php echo \htmlentities($text??'', ENT_QUOTES, 'UTF-8', false); ?>
<script src="/index.js"></script>
</body>
</html>

0
views/.gitignore vendored
View File

View File

@ -1,83 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> Abdussamed ULUTAŞ | @yield('title')</title>
<link rel="stylesheet" href="index.css">
<link rel="stylesheet" href="fonts/Ubuntu/style.css">
<link rel="stylesheet" href="fonts/Cantarell/style.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
@stack('header')
</head>
<body>
<div class="menu">
<a class="icon" href="/">
<img src="saqut.png" height="40px" alt="Logo" />
</a>
<div class="text">
Abdussamed ULUTAŞ
</div>
<div class="lang">
English
</div>
</div>
<div class="main">
<div class="container">
<div class="sidebar indent">
</div>
<div class="content nows">
<h1 class="contenttitle">@yield('subject')</h1>
</div>
<div class="sidebar indent">
</div>
</div>
<div class="container">
<div class="sidebar indent mobile">
<a class="title" href="javascript:void 0">
Hakkımda
</a>
<a class="page" href="javascript:void 0" tabindex="1">
Özgeçmiş
</a>
<a class="page" href="javascript:void 0" tabindex="1">
İletişim
</a>
<a class="title" href="javascript:void 0">
Backend
</a>
<a class="page" href="javascript:void 0" tabindex="1">
PHP Server
</a>
<a class="page" href="javascript:void 0" tabindex="1">
NodeJS Server
</a>
<a class="title" href="javascript:void 0">
Frontend
</a>
<a class="page" href="javascript:void 0" tabindex="1">
Javascript
</a>
<a class="page" href="javascript:void 0" tabindex="1">
NodeJS Server
</a>
</div>
<div class="content">
@yield('content')
</div>
<div class="sidebar" role="menuitem">
<a class="title" href="javascript:void 0" role="text">
Başlıklar
</a>
@stack('sidebar')
</div>
</div>
</div>
<script src="jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@200;300;400;500;600;700;800;900;1000&display=swap" rel="stylesheet">
@stack('footer')
</body>
</html>

View File

@ -1,70 +0,0 @@
@extends('layout')
@section('title', 'Özgeçmiş')
@section('subject', 'Türkiye ve Meşhur Yemekleri')
@push('sidebar')
<a role="menuitem" class="page" tabindex="2" title="Türkiye hakkında" href="#text1">
Türkiye hakkında
</a>
<a role="menuitem" class="page" tabindex="2" title="Türkiye mutfağı" href="#text2">
Türkiye mutfağı
</a>
<a role="menuitem" class="page" tabindex="2" title="Sonuç" href="#text3">
Sonuç
</a>
<a role="menuitem" class="page" tabindex="2" title="Ezogelin Çorbası" href="#text4">
Ezogelin Çorbası
</a>
<a role="menuitem" class="page" tabindex="2" title="Tarhana Çorbası" href="#text5">
Tarhana Çorbası
</a>
<a role="menuitem" class="page" tabindex="2" title="İşkembe Çorbası" href="#text6">
İşkembe Çorbası
</a>
<a role="menuitem" class="page" tabindex="2" title="Kebap" href="#text7">
Kebap
</a>
<a role="menuitem" class="page" tabindex="2" title="İmam Bayıldı" href="#text8">
İmam Bayıldı
</a>
<a role="menuitem" class="page" tabindex="2" title="Hünkar Beğendi" href="#text9">
Hünkar Beğendi
</a>
@endpush
@section('content')
<div class="sectiontitle" role="article" tabindex="3" id="text1" title="Türkiye hakkında">Türkiye hakkında</div>
<p>Türkiye, tarihi ve kültürel zenginlikleriyle dünyanın en özel ülkelerinden biridir. Akdeniz, Ege, Marmara ve Karadeniz'e kıyısı olan ülkemiz, doğal güzellikleri, tarihi yapıları, zengin mutfağı, misafirperver insanları ve daha birçok özelliğiyle turistlerin ilgisini çekiyor.</p>
<p>Türkiye, tarihi kalıntıları ve antik kentleriyle de dikkat çekiyor. Özellikle Anadolu topraklarında yer alan Efes Antik Kenti, Perge Antik Kenti, Aspendos Antik Tiyatrosu, Hierapolis Antik Kenti, Side Antik Kenti, Göbeklitepe gibi yerler tarihe yolculuk yapmak isteyenler için harika bir seçenek. Ayrıca İstanbul, Osmanlı İmparatorluğu'nun kalbinde yer alan tarihi yapıları, Boğaz turu ve büyüleyici manzarasıyla da her yıl binlerce turisti ırlıyor.</p>
<div class="sectiontitle" role="article" tabindex="3" id="text2" title="Türkiye mutfağı">Türkiye mutfağı</div>
<p>Türk mutfağı da dünya çapında ünlüdür. Her bölgenin kendine özgü yemekleri, tatlıları ve içecekleri vardır. Özellikle kebab, döner, baklava, Türk kahvesi ve çayı tüm dünyada bilinir ve sevilir.</p>
<p>Türk insanları da misafirperverliği ile ünlüdür. Türkiye'de gezerken, herhangi bir konuda yardım almak isterseniz, Türk insanlarının size yardım etmek için ellerinden geleni yapacaklarına emin olabilirsiniz. Türk kültürü, insan ilişkilerinde samimiyet ve güvene dayanır.</p>
<div class="sectiontitle" role="article" tabindex="3" id="text3" title="Sonuç">Sonuç</div>
<p>Türkiye'nin zengin tarihi, kültürel, doğal ve gastronomik özellikleri turistlerin dikkatini çekiyor. Türkiye'yi ziyaret ederek, dünya mirasına sahip antik kentleri keşfedebilir, farklı tatları deneyebilir ve misafirperver Türk insanlarıyla tanışabilirsiniz.</p>
<div class="sectiontitle" role="article" tabindex="3" id="text4" title="Ezogelin Çorbası">Ezogelin Çorbası</div>
<p>
Kırmızı mercimek, ince bulgur, domates, biber ve baharatların bir araya gelmesiyle yapılan bu çorba, Türkiye'nin en popüler çorbalarından biridir.
</p>
<div class="sectiontitle" role="article" tabindex="3" id="text5" title="Tarhana Çorbası">Tarhana Çorbası</div>
<p>
Tarhana çorbası, kurutulmuş sebzeler, yoğurt, un ve baharatların karışımıyla yapılan bir çorbadır. Anadolu'nun hemen hemen her bölgesinde yapılmaktadır.
</p>
<div class="sectiontitle" role="article" tabindex="3" id="text6" title="İşkembe Çorbası">İşkembe Çorbası</div>
<p>
Kuzu işkembesinden yapılan bu çorba, Türkiye'de oldukça popülerdir ve özellikle sabahları kahvaltı yerine içilir.
</p>
<div class="sectiontitle" role="article" tabindex="3" id="text7" title="Kebap">Kebap</div>
<p>
Türkiye'nin en ünlü yemeklerinden biri olan kebap, etin şişe dizilmesi ve köz ateşinde pişirilmesiyle yapılır. Adana, Urfa, İskender ve Tantuni kebapları en popüler olanlarıdır.
</p>
<div class="sectiontitle" role="article" tabindex="3" id="text8" title="İmam Bayıldı">İmam Bayıldı</div>
<p>
Patlıcan, soğan, sarımsak ve domatesin bir araya gelmesiyle yapılan bu yemek, genellikle zeytinyağıyla pişirilir.
</p>
<div class="sectiontitle" role="article" tabindex="3" id="text9" title="Hünkar Beğendi">Hünkar Beğendi</div>
<p>
Dana eti ve patlıcan püresinin birleşimiyle yapılan bu yemek, Osmanlı mutfağından günümüze kalmış bir lezzettir.
</p>
@endsection