Yeni Cevap 
 
Konuyu Değerlendir
  • 2 Oy - 5 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
Opencart Ön Kontrol(Front Controller)
Yazar Mesaj
duzgun Çevrimdışı
Hizmetinizde
*******

Mesajlar: 2,323
Katılım: Jul 2008
Rep Puanı: 17
Mesaj: #1
Opencart Ön Kontrol(Front Controller)
Opencart Ön Kontrol(Front Controller)

Opencart Ön Kontrol sınıfı hedef gösterilen yerlere ulaşıp işletir. Bu nedenle sürecin tetikleyicisidir.

index.php de

PHP Kod:
<?php
$controller 
= new Front($registry);
?>

ifadesi ile system/engine/front.php çekirdek sınıfı $controller nesnesine yüklenir.

PHP Kod:
<?php
$controller
->addPreAction(new Action('common/maintenance/check'));
?>

ifadesinde daha önce Opencart Action yazımızda belirttiğimiz gibi 'common/maintenance/check' şeklinde istenen dosyanın yolunu, sınıf adını ve metotunu nesne özelliğine aktarır.

PHP Kod:
<?php
// site bakımda mı? $registry->config->get('config_maintenance') sorgulanır.
//check metodunda bakımda ise payment bölümünü hariç tutarak Action sınıfını 'common/maintenance' ile çağırır.  
$controller->addPreAction(new Action('common/maintenance/check'));

$controller->addPreAction(new Action('common/seo_url'));
?>


PHP Kod:
<?php
// DB_PREFIX . "url_alias keyword sorgusu ile url den gelen anahtar kelimelerin mysql tablosundaki karşılıklarını bulur. 
//URL ile taşınan değişkenleri seo suz haline dönüştürerek Get bilgisini değiştirir. 
//İşlem sonunda yine seonun çözümlenmesi sonucu oluşan route yoluyla Action sınıfını çağırır ve referansını geri döndürür.
$controller->addPreAction(new Action('common/seo_url'));
?>

Front sınıfı addPreAction metodu ile Action sınıfının tespit ettiği bilgileri aktardığı nesnelerin referaslarını sırasıyla Front sınıfının pre_action özelliğine ekler. pre_action özelliğinde tutulan bu referaslar ile Opencartta Router olarak adlandırılan ana yönlendirici hedefi $action nesnesinde tutulur.

PHP Kod:
<?php
$action 
= new Action('common/home');
?>

Front sınıfı dispatch metoduna $action nesnesi parametre olarak gönderilerek metod çalışır.

PHP Kod:
<?php
$controller
->dispatch($action, new Action('error/not_found'));
?>


Front sınıfı dispatch metodu aşağıdaki gibidir.

PHP Kod:
<?php
public function dispatch($action$error) {
$this->error $error;
foreach (
$this->pre_action as $pre_action) {
$result $this->execute($pre_action);
if (
$result) {
$action $result;
break;
}
}
while (
$action) {
$action $this->execute($action);
}
}
?>

yukarıdaki kodlardada görüldüğü gibi pre_action özelliğinde tutulan Action sınıfının ürettiği nesnelerde dahil olmak üzere $action parametresi ile gelen route action nesneside execute metoduna yönlendirilmektedir.

Dispatch metodunun görevi verilen talimatları execute metoduna göndermektir.

PHP Kod:
<?php
foreach ($this->pre_action as $pre_action) {
$result $this->execute($pre_action);
if (
$result) {
$action $result;
break;
}
}
?>

Index.php ye göre bu kurgu şu şekilde işleyecektir.
'common/maintenance/check' metodu site bakımda ise $this->forward('common/maintenance'); ile türediği Controller nesnesindeki forward metodunu çalıştıracak ve oradanda bu sefer 'common/maintenance' action bilgisi geri göndecektir. Eğer site bakımda değilse $result false olacağından break işlemeyecektir ve ikinci olarak seo sınıfına geçecektir.

'common/seo_url' sınıfı ile Eğer seo açık ise _route_ ile gelen bilgi seo suz hali olan route e dönüştürülecek ve yine oluşan bilginin action özellikleri execute metoduna gönderilecektir. Execute ile hedef gösterilen metodun işlemesi sonucu $result true olmadıkça pre_action a atanan opnecart uygulamaları sırayla çalışacaktır. Buradaki mantık duruma göre daha önce dispatch ile gönderilen $action bilgisinin değişebileceği ve değişmişse bu değişen action bilgisinin geçerli olmasını sağlamaktır.

Daha sonra while dögüsü ile $action değişkeni false olana kadar döndürür. Burada while kullanılma sebebi bir sınıfdan diğerine duruma veya şartlara göre yönlendirmeler olabileceği bu yönlerdirmelerindeki metotların işlemesini sağlamaktır. YÖnlendirme artık yoksa işlem bitmiş demektir.

execute metodu ise şu şekildedir.

PHP Kod:
<?php
private function execute($action) {
$file   $action->getFile();
$class  $action->getClass();
$method $action->getMethod();
$args   $action->getArgs();
$action '';
if (
file_exists($file)) {
require_once(
$file);
$controller = new $class($this->registry);        
if (
is_callable(array($controller$method))) {
$action call_user_func_array(array($controller$method), $args);
} else {
$action $this->error;        
$this->error '';
}
} else {
$action $this->error;
            
$this->error '';
}        
return 
$action;
}
?>

$action referansı ile bize gönderilen nesnenin özelliklerininin dosya yolu, sınıf adı, metott ve parametre olduğunu görmektesiniz. execute route ile ifade edilen yolu action bilgisine göre çağırır ve require ile dosyayı hafızaya alır ve önce cınıfı yükler daha sonra call_user_func_array ile metodu çalıştırır. Yaşam döngüsüne bu şekilde devam edilir.
PHP Kod:
<?php
class Home {
function 
__construct() {}
function 
Check($arg$arg2) {
echo 
__METHOD__" yöntemi ve $arg,$arg2 parametreleri\n";
return 
"Ben dönüş değeriyim";
}}
// $action->Check() yöntemi iki parametre ile çağıralım.
$class "Home";
$metot "Check";
$parametre = array("bir""iki");
$action = new $class();
$action call_user_func_array(array($action$metot), $parametre);
echo 
$action;
//Home::Check yönetimi ve bir,iki parametreleri
//Ben dönüş değeriyim
?>

call_user_func_array kullanımınıda bu şekilde örneklendirdik. Yölendirme biçimi ve mantığını iyi anlayınca opencart sistemine olan hakimiyetiniz artacaktır.

©duzgun.com Harici yayınlanması yasaktır.
03-03-2011 13:44
Bu kullanıcının gönderdiği tüm mesajları bul Bu mesajı alıntı yap
rezaradmehr Çevrimdışı
Member
***

Mesajlar: 11
Katılım: May 2014
Rep Puanı: 0
Mesaj: #2
RE: Opencart Ön Kontrol(Front Controller)
sağol
02-06-2014 14:13
Bu kullanıcının gönderdiği tüm mesajları bul Bu mesajı alıntı yap
Yeni Cevap 


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Opencart Ücretli Destek ve Özel Tema Tasarımı oscommerce2626 1 2,229 02-06-2017 18:03
Son Mesaj: wax123
  Opencart 2.0 Gün yüzüne Çıktı gulendam 5 4,907 28-12-2014 22:22
Son Mesaj: gulendam
  OpenCart Action Temel Sınıfı(Base Class) duzgun 4 5,081 27-08-2014 17:52
Son Mesaj: Düzgün Reyiz Üşüyoruz
  OpenCart Registry duzgun 2 4,296 04-08-2014 17:18
Son Mesaj: uveybaba
  Opencart 1.5 Attribute & Options Table DB Diagram duzgun 6 6,766 04-08-2014 17:17
Son Mesaj: uveybaba
  opencart 1.5.1.3.1 Çıkmış yunusdogan 2 3,463 02-06-2014 14:12
Son Mesaj: rezaradmehr

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi