2013-01-19 56 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