# microargist framework

## 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"

```