2013-07-09 45 views
5

我想創建自定義的CMS,並且想創建一個用戶包,其中我將擁有帶showProfile()函數的控制器。但問題是我想輕鬆編輯此配置文件視圖。所以我想知道是否有辦法創建級聯視圖。就像app/views /中沒有文件一樣,vendor/vendor/package/src/views將被加載。我希望你有這個想法:)重寫Laravel 4包視圖

編輯:

我設法使它工作。我必須在我的ServiceProvider中爲視圖註冊新的命名空間。 我把這個代碼的ServiceProvider:

\View::addNamespace('cmscore',array(app_path()./'views/packages/zaalbarxx/cmscore'); 

凡zaalbarxx/cmscore爲供應商/包,cmscore是命名空間,我可以在以後控制器使用像查看::讓(「cmscore ::指數」)。我在boot()方法BEFORE $ this-> package()中添加了這段代碼,所以這種方式app/views優先於package/views。工作輝煌。

+0

好找,謝謝發貼爲解決方案 – fideloper

回答

4

它已經是可能的,但是它的結構默認情況下會查看vendor/package-name/src/views,但是如果在app/views/packages/package-name/中有相同的選項。

2

如上所述,您應該可以加載包視圖。

但是,您可以在app/config/view.php中找到的陣列中添加更多視圖位置。

此外,視圖路徑可以在運行時與FileViewFinder類中的addLocation()方法一起添加。

使用該方法,在服務提供商會是什麼樣子:

$app['view.finder']->addLocation('/path/to/views'); 
在您的應用程序

或在任何地方:

App::make('view.finder')->addLocation('/path/to/views'); 

另外請注意,我最近回答this question on cacheing view output,這可能會幫助您瞭解如果您選擇沿着該路線行進,則可以擴展View包的某些部分。

+0

請注意,package視圖只能級聯到'app/views',因爲這個位置是從'Illuminate \ Support \ ServiceProvider :: package()'硬編碼的。 – crynobone

+0

是的,我從裝載視圖沒有問題。但我想在包中創建一個簡單的視圖,然後有能力將其移動到應用程序/視圖和擴展。或者我應該只是不創建包中的視圖,並強制用戶在app/views中創建文件以使用此profile()控制器方法? –

0

你不需要編程這種行爲,如果你看過laravel代碼,你會看到,這是建於...

包默認情況下會先看看在和 app/views/packages/package-name/(全部小寫!即使軟件包或作者有上限!在Windows上不被注意,然後在Linux上,你會撞上牆!)

如果客戶應用程序視圖不存在,軟件包視圖將從軟件包本身加載裏面: vendor/author/package-name/src/views

+2

請注意,自定義路徑不是'... packages/package-name ...',而是'... packages/vendor/package-name ...'(注意** vendor **部分)。您可以使用'php artisan view:publish vendor/package'命令發佈包視圖以進行修改。文檔:http://laravel.com/docs/4.1/packages#package-views –

+0

另一個問題:'view:publish'命令有時會在標題情況下創建文件夾,例如'應用/視圖/包/供應商/ Package'。但是這可能不會被服務器拾取,您可能需要將該文件夾重命名爲「.../vendor/package」。 –