-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ApplicationFlash Sınıfının Yapımı #43
Comments
Redirect 302 olduğundan bir flag olmalı. Bu flag istek aşamasında eğer flash varsa true atanacak istek kapanırken false çekildiği yerde veriler silinecek. Ama bu sefer 200 dönüşleri için sorun olur mu ? Bu durum bir sonraki istek sonuna kadar silinmememiş olması problem yaratır mı? |
BarakApplication için 1 - ilklendirme için
2 - sonlandırma için
ApplicationController için 1 - Yük değişkeninin tanımlanması protected $flash = []; 2 - Aşağıdaki kod satırından önce yere before ve after action için eklenmeli if (!empty($this->flash)) ApplicationFlash::sets($this->flash);
// interrupt ?
if ($this->_redirect_to || $this->_render || $this->_send_data) return TRUE; 3 - Aşağıdaki kod satırından sonra yere main action için eklenmeli // main action çalışma sonrası
// içeriğin ne ile döneceğini bilmedğimizi varsayalım
$main_content = NULL;
// _localsda flash varsa çalıştıralım
if (!empty($this->flash)) ApplicationFlash::sets($this->flash); ApplicationView için 1 - Aşağıdaki kod satırları arasına set edilmeli if ($main_render) {
$this->locals["flash"] = ApplicationFlash::gets();
self::$main_template = $this->template;
self::$main_layout = $this->layout;
self::$main_locals = $this->locals;
ApplicationLogger::info(" Rendering " . self::$main_template . ".php within layouts/" . self::$main_layout . ".php");
} Tabi ki sınıfımız : <?php
class ApplicationFlash {
const FLASHKEYS = ["success", "info", "warning", "danger"];
const FLASHFLAG = ".flag";
public static function init() {
if (isset($_SESSION[self::_storage_key()]))
$_SESSION[self::_storage_key()][self::FLASHFLAG] = TRUE;
}
// in ApplicationController
// $this->flash["info"] = "gökhan";
// ApplicationFlash::sets($this->flash);
public static function sets($options) {
if ($options) {
ApplicationLogger::info(serialize($options));
foreach ($options as $key => $value) {
if (!in_array($key, self::FLASHKEYS))
throw new Exception("Flash kullanımı için bilinmeyen anahtar → " . $key);
$_SESSION[self::_storage_key()][$key] = $value;
}
}
}
// in ApplicationView
// $this->_locals["flash"] = ApplicaionFlash::gets();
// $flash variable access in templates
// $flash["info"];
public static function gets() {
if (isset($_SESSION[self::_storage_key()]))
return $_SESSION[self::_storage_key()];
return null;
}
public static function close() {
if (isset($_SESSION[self::_storage_key()][self::FLASHFLAG]))
unset($_SESSION[self::_storage_key()]);
}
private static function _storage_key() {
return '_session_flash';
}
}
?> Kullanım örneği bir HomeController sınıfında: public function logout() {
if (isset($_SESSION["user"])) {
$this->flash["success"] = "Başarılı bir şekilde oturum kapattınız";
session_destroy();
}
$this->redirect_to("home/index");
} |
Gerek var mı bilemedim şöyle bir class bir değişkenin ApplicationController sınıfına entegre edilmesiyle hallolabilir.
close
kısmı istek bitim sonrası çalıştırılması zorunlu alan. Bu sınıf modüler olamaz çünkü ApplicationController içersinde ekleniyor.The text was updated successfully, but these errors were encountered: