【问题标题】:Laravel 4.0 nested controllerLaravel 4.0 嵌套控制器
【发布时间】:2013-01-18 11:09:47
【问题描述】:

我尝试根据以下结构在 Laravel 4 中获取嵌套控制器:

  • 应用程序
    • 控制器
      • 基地
        • BaseController.php
      • 网站
        • WebsiteController.php

我想让网站路由与扩展 BaseController 的 WebsiteController 相关联。

我尝试了以下方法

用于 route.php (app/route.php)

Route::resource('website', 'Controllers\Website\WebsiteController');

用于 BaseController.php (app/controllers/base/BaseController.php)

use Illuminate\Routing\Controllers\Controller;
class BaseController extends Controller {

    protected function setupLayout(){
        if ( ! is_null($this->layout)){
            $this->layout = View::make($this->layout);
        }
    }
}

用于 WebsiteController.php (app/controllers/website/WebsiteController.php)

use Controllers\Base\BaseController;
class WebsiteController extends BaseController {
    public function index(){
        return 'index';
    }
}

不幸的是,当我转到 http://mywebsite.com/website 时,它根本不起作用。

谢谢。

【问题讨论】:

  • Erreur HTTP 500(内部服务器错误)
  • 谢谢。您是否也可以在此处打印堆栈跟踪或相关消息?
  • 不会出现任何错误,也不会出现任何日志错误。
  • 我不确定您使用的是什么操作系统,但我获取有意义的错误消息的下一个策略是检查网络服务器错误日志
  • 日志的好主意@fideloper。它现在正在工作。 (我会发布结果)谢谢

标签: routes laravel controllers laravel-4


【解决方案1】:

如果没有错误转储,我们无法确定,但您可以尝试以下方法:

1) 运行 composer 的 dump-autoload,以便自动加载器知道新的类:

$ php composer.phar dump-autoload

2) 我认为您不需要使用 use Controllers\Base\BaseController 指令,因为模型目录默认是自动加载的。由于您没有以不同的方式命名控制器,因此不需要 use 指令。上面的“dump-autoload”应该可以解决问题

3)dump-autoload后,改变

Route::resource('website', 'Controllers\Website\WebsiteController');

到这里:

Route::resource('website', 'WebsiteController');

除非您为新控制器定义不同的命名空间,否则您无需使用特定的类(例如“Controllers\Website\WebsiteController”)

【讨论】:

  • 带有转储自动加载和更改路线的事件仍然不起作用。我通过使用 Controller 扩展 websitecontroller 来简化代码(删除 baseController 步骤)但是这样的事件仍然显示错误 500
猜你喜欢
  • 2019-12-12
  • 1970-01-01
  • 2013-05-25
  • 2012-11-30
  • 2013-09-27
  • 1970-01-01
  • 2012-10-27
  • 2013-12-01
相关资源
最近更新 更多