• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
روش صحیح ارجاع از صفحه ای به صفحه دیگر چیست؟
#1
Question 
در الگوی mvc وقتی در کنترلر بخواهیم یک ویو را فراخوانی کنیم از این دستور استفاده می کنیم:
$this->registry->template->show('group');
اگر بخواهیم اکشنی از یک کنترلر را فراخوانی کنیم از این دستور استفاده می کنیم:
groupController::index();
ولی من می خواهم یک اکشن از کنترل را فراخوانی بکنم و url هم به اکشن جدید تغییر کند با روشهای بالا url تغییر نمی کند
برای مثال برای نمونه بالا url اینگونه شود:
http://localhost/project/group/index
چطوری می توانم این کار را بکنم؟
  پاسخ
تشکر شده توسط : Goback
#2
دوست عزیز اینا هیچ ربطی به mvc نداره.
mvc فقط یه قانون هست که خیلی ساده هم هست . تمامی این مورادی که شما می پرسید فقط ساختاری هست که بستگی به ایده خودتون داره.
شما داخل فریم ورکهایی که نوشته شده نگاه کنید هر کدام ایده متفاوتی رو پیاده سازی کردن.
اینکه چه جوری این کار رو انجام بدید ما باید بدونیم اون نیمچه فریم ورکی که نوشتین چه جوری هست
  پاسخ
تشکر شده توسط : rezaweb Goback
#3
ممنون
روتر mvc این است:
کد پی‌اچ‌پی:
<?php

class router {
 
/*
 * @the registry
 */
 
private $registry;

 
/*
 * @the controller path
 */
 
private $path;

 private 
$args = array();

 public 
$file;

 public 
$controller;

 public 
$action
 
 public 
$id;

 function 
__construct($registry) {
        
$this->registry $registry;
 }

 
/**
 *
 * @set controller directory path
 *
 * @param string $path
 *
 * @return void
 *
 */
 
function setPath($path) {

    
/*** check if path i sa directory ***/
    
if (is_dir($path) == false)
    {
        throw new 
Exception ('Invalid controller path: `' $path '`');
    }
    
/*** set the path ***/
     
$this->path $path;
}


 
/**
 *
 * @load the controller
 *
 * @access public
 *
 * @return void
 *
 */
 
public function loader()
 {
    
/*** check the route ***/
    
$this->getController();

    
/*** if the file is not there diaf ***/
    
if (is_readable($this->file) == false)
    {
        
// echo $this->file;
        // die ('404 Not Found');
        
$this->file $this->path.'/error404.php';
                
$this->controller 'error404';
    }

    
/*** include the controller ***/
    
include $this->file;

    
/*** a new controller class instance ***/
    
$class $this->controller 'Controller';
    
$controller = new $class($this->registry);

    
/*** check if the action is callable ***/
    
if (is_callable(array($controller$this->action)) == false)
    {
        
$action 'index';
    }
    else
    {
        
$action $this->action;
    }
    
/*** run the action ***/
    
$controller->$action();
 }


 
/**
 *
 * @get the controller
 *
 * @access private
 *
 * @return void
 *
 */
private function getController() {

    
/*** get the route from the url ***/
    
$route = (empty($_GET['rt'])) ? '' $_GET['rt'];

    if (empty(
$route))
    {
        
$route 'index';
    }
    else
    {
        
/*** get the parts of the route ***/
        
$parts explode('/'$route);
        
$this->controller $parts[0];
        if(isset( 
$parts[1]))
        {
            
$this->action $parts[1];
        }
        if(isset(
$parts[2])){
            
$this->id $parts[2];
        }
        if(isset(
$parts[3])){
            
$this->option $parts[3];
        }
        
        
    }

    if (empty(
$this->controller))
    {
        
$this->controller 'index';
    }

    
/*** Get action ***/
    
if (empty($this->action))
    {
        
$this->action 'index';
    }

    
/*** set the file path ***/
    
$this->file $this->path .'/'$this->controller '.php';
    
}


}

?>

این کافی است؟
اگر نه بگویید از کجا باید بفهمم؟
  پاسخ
تشکر شده توسط : Goback
#4
ما توی ZF یه helper داریم به اسم rediector که url رو می گیره ( اکشن و کنترلر و ماژول ) و به url تبدیل می کنه و با header اون رو به صفحه دیگه ارجاع میده
  پاسخ
تشکر شده توسط : Goback


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان