2013-12-17 254 views
0

我正在使用需要用戶身份驗證的現有上載腳本。但是由於我沒有編寫上傳腳本,因此我幾乎不可能讀取源代碼並將其編譯到單獨的視圖和控制器文件中。問題是如果腳本沒有通過引導文件路由,它不能訪問Yii變量,從而用戶登錄信息。Yii - 無控制器路由

我嘗試在用戶登錄時設置自定義會話變量。然而,它幾乎沒有工作,因爲我的自定義會話會在Yii設置的會話之前過期。

任何幫助,將不勝感激。

+1

請用更多的努力和形象化的方式闡述你的問題。 –

+0

好吧,讓我們再試一次。如果我沒有控制器和視圖文件,我怎麼能創建一條路徑讓Yii直接到服務器上的腳本文件(例如localhost/upload.php) – Romed7442

+0

您的Yii應用程序可以訪問與上傳腳本相同的數據庫? –

回答

0

由於腳本編寫的方式,我只能找到一種方法來做到這一點。這將涉及重寫腳本的一些元素。

  1. 將filemanager保存在受保護的/ vendor中。

  2. 您需要一個控制器來處理請求的路由。這也將爲您提供所需的訪問控制。將其稱爲FileUpload並在您通常在項目中創建控制器的位置創建它。在聲明該類之前,在控制器的開始處,從其先前保存的位置導入fileUpload文件; Yii::import('application.vendors.*');

  3. 您需要採取措施來處理傳入的請求。調用這個actionIndex。給它下面的代碼。

    public function actionIndex() { 
        //Start capturing the output from the script 
        ob_start(); 
        require_once('filemanager/dialog.php'); 
    
        //Finish capturing output, and save to a variable 
        $output = ob_end_clean(); 
        $this->render('index', array('output' => $output)); 
    } 
    
  4. 然後你需要一個視圖文件。稱之爲'output.php',它只包含一行; <?php echo $output; ?>

這將呈現腳本生成的html,並希望將其包含在您的現有模板中。

您的第一個問題是腳本發送的標頭不會被ob_start丟棄。您需要從腳本中刪除這些內容。它還會啓動一個會話,它會拋出「會話已經開始」的錯誤,這可以通過改變config.php文件的第一行被固化,以

if(!isset($_SESSION)) 
    { 
     session_start(); 
    } 

你的下一個問題將是沒有腳本和樣式表因爲供應商沒有使用相關的文件路徑,並且還因爲您剛剛刪除了標頭。您需要重新編寫大量腳本才能包含必要的文件。幸運的是,您現在可以訪問Yii函數,因此可以使用資產管理器來發布腳本所需的所有js和css文件。

您的最終(希望!)問題將成爲腳本頁面使用的URL。目前它們都指向腳本內的文件。您需要重寫這些才能使用Yii路由。幸運的是,在主文件dialog.php中,您應該可以訪問所有正常的Yii函數,因此您可以將$ baseUrl設置爲$ this-> createUrl()等。如果需要向控制器添加額外的操作,可以按照上面的模式可以調用其他文件,如腳本中的upload.php文件。

希望所有適合你的!

0

確定使用MVC模式框架一所以控制器爲佳方式將請求路由。作爲每您的問題,我建議你使用htaccess文件做路由到所需的文件,被Yii

0
處理其他文件

從現有源複製代碼到新的Yii控制器/操作...完成:D