2013-01-19 55 views
5

我想在我的Laravel 4包中安裝控制器,但無法使路由工作。Laravel 4中的包控制器

我已經按照Laravel 4文檔中的包裝說明操作,並獲得了與非控制器路線一起工作的routes.php文件。

有人請給我一些關於如何讓包控制器在Laravel 4中工作的說明,這將非常感激。

在此先感謝。

拉爾斯

// EDIT: 

// routes.php 

    Route::get('admin', 'Package::[email protected]'); // Does not work 

    Route::get('admin', function(){ // Works fine 
     return 'Dashboard'; 
    }) 
+0

請發表您的routes.php文件的代碼顯示你已經嘗試 – Laurence

+0

你去那裏:) –

+0

嘿,你設法讓這個工作?如果是這樣。你能用溶劑發佈答案嗎? – DonSeba

回答

3

你需要參考控制器與它的命名空間太

Route::get('/admin', 'PackageNS\Package\Controllers\[email protected]'); 

甚至

Route::controller('PackageNS\Package\Controllers\AdminController', 'admin'); 
+0

這對我有幫助,但仍然出現錯誤,因爲我創建的控制器擴展了基本控制器,使其無法再找到。我得到'FatalErrorException:錯誤:Class'PackageNS \ Package \ BaseController'找不到'。據推測,我需要添加'使用路徑\ \ \ basecontroller;'或類似的東西,但我不知道基礎控制器的路徑。謝謝 –

+2

@Al_,您需要包含控制器的完整命名空間路徑,或者使用'use'指令來包含它。 '使用Illuminate \ Routing \ Controllers \ Controller'或'extends \ Illuminate \ Routing \ Controllers \ Controller' –

+0

謝謝Kevin –

2

在你的包的服務提供者,你有你的包含文件的路線?我不相信L4會自動加載路徑文件。你可以在任何地方做到這一點,但我懷疑這將是最適合的地方。

public function register() 
{ 
    $this->package('vendor/pkgname'); 
    require __DIR__.'/../routes.php'; 
} 
+0

感謝您的回答,但我已將我的路線文件包含在我的軟件包的服務提供商中。非控制器路線在這裏工作正常。 –

-1

你有沒有做到這一點:

composer dump-autoload 

自動加載需要被告知那些閃閃發光的新類。我還建議您檢查Web服務器日誌是否有錯誤。

10

我不知道你的情況的具體情況,也不知道這是否是解決這個問題的「正確」方法,但是由於我遇到了同樣的問題,我想我會分享我是如何解決它的。

我把我的包控制器在控制器子目錄,讓我的目錄結構是這樣的:

/src 
    /Vendor 
     /Package 
      PackageServiceProvider.php 
    /config 
    /controllers 
    /lang 
    /migrations 
    /views 
/tests 
/public 

然後,我添加了控制器文件夾到我的包的composer.json自動加載類映射。

{ 
    "name": "kevin-s-perrine/my-first-packge", 
    "description": "", 
    "authors": [ 
     { 
      "name": "Kevin S. Perrine", 
      "email": "[email protected]" 
     } 
    ], 
    "require": { 
     "php": ">=5.3.0", 
     "illuminate/support": "4.0.x" 
    }, 
    "autoload": { 
     "classmap": [ 
      "src/migrations", 
      "src/controllers" 
     ], 
     "psr-0": { 
      "KevinSPerrine\\MyFirstPackage": "src/" 
     } 
    }, 
    "minimum-stability": "dev" 
} 

最後,我在包的根目錄下運行composer dump-autoload,然後按名稱在路由文件中引用的控制器。

Route::get('myfirstpackage', '[email protected]'); 
+0

我覺得這個答案好多了。 – DonSeba