Laravel 4中的封装控制器

Lar*_*een 5 php laravel laravel-4

我想在我的Laravel 4软件包中安装控制器,但我无法使路由工作.

我已经按照Laravel 4文档中的包说明进行操作,并将routes.php文件与非控制器路由一起使用.

有人可以给我一些关于如何让包控制器在Laravel 4中工作的说明,非常感谢.

提前致谢.

拉尔斯

// EDIT:

// routes.php

   Route::get('admin', 'Package::AdminController@index'); // Does not work

   Route::get('admin', function(){  // Works fine
       return 'Dashboard';
   })
Run Code Online (Sandbox Code Playgroud)

Kev*_*ine 10

我不知道你的具体情况,也不知道这是解决这个问题的"正确"方法,但是由于我遇到了同样的问题,我想我会分享我是如何解决它的.

我把我的包控制器放在controllers子目录中,这样我的目录结构如下所示:

/src
    /Vendor
        /Package
            PackageServiceProvider.php
    /config
    /controllers
    /lang
    /migrations
    /views
/tests
/public
Run Code Online (Sandbox Code Playgroud)

然后,我将controllers文件夹添加到我的包的composer.json自动加载类映射中.

{
    "name": "kevin-s-perrine/my-first-packge",
    "description": "",
    "authors": [
        {
            "name": "Kevin S. Perrine",
            "email": "removed@somewhere.com"
        }
    ],
    "require": {
        "php": ">=5.3.0",
        "illuminate/support": "4.0.x"
    },
    "autoload": {
        "classmap": [
            "src/migrations",
            "src/controllers"
        ],
        "psr-0": {
            "KevinSPerrine\\MyFirstPackage": "src/"
        }
    },
    "minimum-stability": "dev"
}
Run Code Online (Sandbox Code Playgroud)

最后,我composer dump-autoload在包的根目录中运行,然后在routes文件中按名称引用控制器.

Route::get('myfirstpackage', 'MyFirstPackageHomeController@getIndex');
Run Code Online (Sandbox Code Playgroud)


Win*_*ian 3

您还需要引用控制器及其命名空间

Route::get('/admin', 'PackageNS\Package\Controllers\AdminController@getIndex');
Run Code Online (Sandbox Code Playgroud)

甚至

Route::controller('PackageNS\Package\Controllers\AdminController', 'admin');
Run Code Online (Sandbox Code Playgroud)

  • @Al_,您需要包含控制器的完整命名空间路径,或使用“use”指令来包含它。`使用 Illuminate\Routing\Controllers\Controller` 或 `扩展 \Illuminate\Routing\Controllers\Controller` (2认同)