2012-11-22 69 views
0

我想要做的是在config目錄中創建一個像my_custom_settings.php這樣的文件,並在視圖部分調用已定義的變量。定義自定義變量並直接調用變量查看部分

讓我們在my_custom_settings.php說:

define('TEMPLATE_DIR', 'assets/front'); 

,並鑑於部分直接在HTML:

<link href="<?=TEMPLATE_DIR?>/stylesheet/style.css"> 

或任何其他替代解決方案?

PS:我現在用的base_url()訪問路徑

+0

base _url是做這件事的最好方法....爲什麼你想這樣做..... –

+0

@Venkat我只想定義一些圖片目錄,並且我在codeigniter項目中看到了某處。使用'defined variable'訪問路徑有什麼問題? –

+0

所以你想在你的應用程序中使用一些圖像。爲此,你想創建一個目錄,你想通過定義一個自定義變量來調用該目錄.......我是對的 –

回答

1

我個人延長/core/helpers/url_helper.php,默認值是site_url() , base_url(), current_url();等等......我只是延長,對於具有base_static_url();

所以把核心/助理/ url_helper.php:

if (! function_exists('base_static_url')) 
{ 
    function base_static_url() 
    { 
     $CI =& get_instance(); 
     return $CI->config->slash_item('base_static_url'); 
    } 
} 

然後在config.php文件時,只需添加1更多行:

$config['base_url'] = "http://mysite.com/"; 
$config['base_static_url'] = "http://mysite.com/static/"; //path to your static resources folder 

那麼你可以使用調用靜態資源:

<img src="<?php echo base_static_url();?>img/myimage.png"/> 
+0

感謝您的幫助,我很欣賞您的答案,但我已經在我的應用程序中定義了'base_url()',但我只想知道它是否符合我的問題,因爲我在codeigniter項目中看到了某處,我知道我不喜歡沒有特定的理由使用定義的變量,如果它是錯誤的,那麼請讓我正確 –

+0

你可以使用常量或擴展url_helper.php我更喜歡擴展url_helper.php的原因是設置base_url, current_url,site_url和等等,所以我認爲更好如果你有一個文件 – sbaaaang

+0

並不重要,如果你只是有base_url()你可以設置其他easy如果你做我告訴你做的:) – sbaaaang

0

圖片,CSS,JavaScript的,PDF文件,XML ......任何被允許直接訪問不應該活在你的應用程序目錄。你可以做到,但你真的不應該這樣做。在這些文件的目錄根目錄創建一個新文件夾,它們不應該混入到您的應用程序中,例如:在您的視圖文件夾中。

  1. 很可能是,您正在使用.htaccess文件,它只允許通過http訪問某些目錄。這對於安全原因非常有用,您想要停止直接訪問控制器和模型的任何嘗試。這也是我們檢查BASEPATH是否定義在大多數文件頂部的原因,如果不是,則退出('沒有直接腳本訪問')。

  2. 爲了獲得這些資源(js/css/images)的正確路徑,不能使用相對路徑,因爲我們沒有使用正常的目錄結構。 url/users/login沒有加載目錄/ users/login中的文件,它可能不存在。這些只是引導程序用來知道要使用哪個類,方法和參數的uri段。 爲了得到正確的路徑,或者使用正斜槓(假設你的應用程序和資產都在根目錄下,而不是一個子目錄)是這樣的:

    或者你最好的選擇,使用絕對URL:

    //引用您的$配置[「BASE_URL」] 「/> 相當於:

    http://mydomain.com/images/myimage.jpg 有內置CI,你可以選擇使用以及幫手,但是這的確是所有你需要知道的。

+0

這是錯誤的,如果你需要移動靜態資源到另一個網站的域名,你會得到一個很大的重構麻煩! – sbaaaang

+0

不需要將文件夾更改爲另一個域目錄,然後使用base_url/iamges/imge.jpg再次訪問它們。我現在正在申請中工作。幾天來,我在我的本地系統上工作,其中我的base_url是localhost/application_name。之後,我把我的應用程序轉移到服務器,所以我只是改變了我的base_url它就像一個寶石....... –

+0

你沒有捕捉到我告訴你,如果你有**應用程序** ** site.com **和** othersite.com **上的** img文件夾**? – sbaaaang

1

確定這可能是更多的則是你所尋找的, 但這是把網站廣泛CONFIGS在一個文件的方式,然後輕鬆地讓他們提供

在你的配置文件夾文件:my_custom_settings.php

在該文件中要設置像一個配置值:

$config['TEMPLATE_DIR'] = 'assets/front' ; 
$config['site_slogan'] = 'Laravel? Never heard of it' ; 

創建一個名爲另一個文件:My_custom_settings.php

把那個文件:應用程序/庫/ My_custom_settings.php 該文件將包含:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class My_custom_settings 
{ 

function __construct($config = array()) 
{ 
foreach ($config as $key => $value) { 
    $data[$key] = $value;  
    } 
// makes it possible for CI to use the load method 
$CI =& get_instance(); 
// load the config variables 
$CI->load->vars($data); 
} 
} // end my custom settings 
現在在你的控制器構造

現在

public function __construct() { 
    parent::__construct(); 

// Load configs for controller and view 
    $this->load->library('my_custom_settings'); 
    $this->config->load('my_custom_settings'); 


} // end construct 

爲最酷的部分 - 任何你放入該配置文件,將可用於您的控制器和視圖。 (你也可以在模型構造函數中加載配置)。

在你得到這個 - $>的配置值控制器或模型

,像

$this->config->item('site_slogan') 

有點彆扭,但對於意見,繼承人的獎勵,你只需要配置名稱

echo $TEMPLATE_DIR . '/somefile' ; 
+0

+1喜歡你的方式。我改變了主意,因爲沒有理由使用了像'TEMPLATE_DIR'這樣的東西。非常感謝你的幫助 ;) –