gpt4 book ai didi

Laravel 4 无法从命名空间 Controller 找到 BaseController

转载 作者:行者123 更新时间:2023-12-02 20:26:41 25 4
gpt4 key购买 nike

我正在尝试构建我的 Laravel 4 站点,以便 (1) 主要应用程序组的组件( Controller / View /等)耦合在一起,以及 (2) Laravel 的支持代码位于我的 Web 服务器的文档根目录之外。默认的 Laravel 主页加载正常,但我无法让命名空间 Controller 正确路由。这是相关的文件结构:

/ [Project Root]
/laravel [full laravel install here]
composer.json
/app
/controllers
BaseController.php
/dev
/htdocs
index.php
/app
/PageTypes
/Home
/controllers
HomeController.php
/views
HomeView.blade.php

默认的 Laravel 登陆页面加载正常。但是当我尝试使用自己的命名空间设置 Controller 时,我不断收到错误。

这是HomeController.php:

namespace PageTypes;

use Home\controllers;

class HomeController extends BaseController {

public function showWelcome()
{
return View::make('hello');
}

}

这是routes.php:

<?php

Route::get('/', function()
{
return View::make('hello');
});

Route::get('/home', 'PageTypes\Home\controllers\HomeController@showWelcome' );

此设置会产生错误:“Symfony\Component\Debug\Exception\FatalErrorException类“PageTypes\BaseController”未找到”好的,laravel 至少找到了 HomeController.php。

很多其他回复告诉我尝试将 BaseController 更改为\BaseController。进行这一更改并保持其他所有内容不变会产生错误“ReflectionException:Class PageTypes\Home\controllers\HomeController 不存在”。什么?...>.<

我不明白命名空间、psr-0 和 laravel 路由的交叉点,任何帮助将非常感激。

后续问题:(1)我可以采取什么步骤来调试这个? NGINX 的日志除了我在抛出的异常错误中看到的内容之外并没有真正告诉我任何信息。 (2) 有没有人在 github 上遇到过类似布局的 laravel 种子?我很想有一些东西可以引用。

这是我的配置设置:

// index.php 
...
require __DIR__.'/../../laravel/bootstrap/autoload.php';
$app = require_once __DIR__.'/../../laravel/bootstrap/start.php';
...

// bootstrap/autoload.php
...
require __DIR__.'/../vendor/autoload.php';
...


// bootstrap/paths.php
...
'app' => __DIR__.'/../app',
'public' => __DIR__.'/../../dev/htdocs/',
'base' => __DIR__.'/..',
'storage' => __DIR__.'/../app/storage',
...

// compose.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"require": {
"laravel/framework": "4.0.*"
},
"autoload": {
"psr-0": {
"PageTypes": "../dev/htdocs/app"
},
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan optimize"
],
"pre-update-cmd": [
"php artisan clear-compiled"
],
"post-update-cmd": [
"php artisan optimize"
],
"post-create-project-cmd": [
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
},
"minimum-stability": "dev"
}

最佳答案

class HomeController extends \BaseController {

基本上,因为您位于命名空间中,所以需要解析 global namespace 中的 BaseController (这就是 \ 的作用)。

你也可以逃脱

use \BaseController;

class HomeController extends BaseController {

但是由于您只会在整个 Controller 中引用 BaseController 一次,因此没有多大意义。

另一个潜在的问题是您的命名空间,这就是 PageTypes\Home\controllers\HomeController 所指的。这实际上并不是路径名,而是它正在寻找的命名空间名称(恰好 PSR 后面的自动加载器将目录结构与命名空间相匹配)。

尝试使用

namespace PageTypes\Home;

而不仅仅是PageTypes

关于Laravel 4 无法从命名空间 Controller 找到 BaseController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18687464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com