路由到子文件夹中的控制器在 Laravel 4 中不起作用

Posted

技术标签:

【中文标题】路由到子文件夹中的控制器在 Laravel 4 中不起作用【英文标题】:Route to controller in subfolder not working in Laravel 4 【发布时间】:2013-01-08 08:53:46 【问题描述】:

当我遇到这个问题时,我正在将我的 Laravel 3 应用程序更新到 Laravel 4...

我尝试过的路线:

Route::get('backend/login', 'backend/UserController@login');
Route::get('backend/login', 'backend.UserController@login');

【问题讨论】:

你更新你的自动加载文件了吗? (作曲家转储自动加载) 是的,自动加载文件已更新,但没有解决问题。 你只是得到一个 404 还是你得到一个更有用的错误?如果您遇到错误,可以在这里发布吗? 另外,您的控制器是否在命名空间中? 不,控制器不在命名空间中。 【参考方案1】:

如果你打算使用 Laravel 4,也许你应该看看这个:你可以指定在一组路由上使用的命名空间,你可以在这里看到:http://www.laravel-tricks.com/tricks/route-group-namespacing

所以在你的示例中:

Route::group(array('prefix' => 'backend', 'namespace' => 'backend'), function()


    Route::get('login', 'UserController@login');

);

它就像一个魅力:)

我一直在使用它,并且非常好,它可以帮助您保持代码更清晰和更易于理解。试试看!

【讨论】:

【参考方案2】:

正如这里所解释的,使用 Laravel 4.1,您可以指定要在一组路由上使用的命名空间,如您在此处看到的:http://www.laravel-tricks.com/tricks/route-group-namespacing

我一直在使用它,并且非常好,它可以帮助您保持代码更清晰和更易于理解。试试看!

【讨论】:

【参考方案3】:

app/controllers 目录中的我的管理控制器

class AdminController extends BaseController 
/**.
 * @return \AdminController
 */
    public function __construct()
    

    

现在我在控制器文件夹中有一个名为 admin 的文件夹,即 app/controllers/admin ,我还有另一个名为 AdminDashboardController.php 的控制器

class AdminDashboardController extends AdminController 

/**
 * Display a listing of the resource.
 *
 * @return Response
 */
    public function getIndex()
    
    return View::make('admin/dashboard');
    
    

最后是我的 Route.php 文件

Route::group(array('prefix' => 'admin'), function()

    # Admin Dashboard
    Route::controller('/', 'AdminDashboardController');
 );

希望这会有所帮助..:-)

【讨论】:

【参考方案4】:

几个小时前我遇到了类似的问题,我不得不尝试一下才能让它正常工作。

路线:

Route::group(array('prefix' => 'admin'), function() 
    Route::resource('/', 'admin\DashboardController');
);

在“controllers/admin”中我把 DashboardController:

namespace admin;

use Illuminate\Support\Facades\View;

class DashboardController extends \BaseController 

    public function index()
    
        return View::make('admin/dashboard');
    


这在 Laravel 4 上成功了。希望你觉得它足够有用。 :)

【讨论】:

这很有帮助。你拯救了这一天。【参考方案5】:

您也可以将您的后端/管理面板放在一个包中..fruit 以供思考 :)

【讨论】:

【参考方案6】:

我建议这样做

Route::group(array('prefix' => 'backend'), function() 
    // Responds to Request::root() . '/backend/user'
    Route::resource('login', 'UserController');
);

在此处查看更多信息

Laravel 4 nested resource controllers Route::resource('admin/photo', 'PhotoController'); not working

【讨论】:

【参考方案7】:

目前,在 Laravel 4 Beta 1 中,您可以“仅?”使用命名空间。

例如在你的控制器文件中:app/controllers/backend/UserController.php

<?php namespace Controllers\Backend;

use Illuminate\Routing\Controllers\Controller;

class UserController extends Controller 

    // Note extends Controller and not BaseController

    // Your stuff

?>

所以之后,在文件中:app/routes.php :

<?php
Route::get('backend/login', 'Controllers\Backend\UserController@login');

我不知道是否是更好的方法,但在这里工作。 Edit & dump-autoload "composer.json" 实际上似乎不起作用。

如果有人能改进这一点,他会让我开心! :)

【讨论】:

还是不行:路由:Route::get('backend/login', 'Controllers\Backend\UserController@login');类(在 app/controllers/backend/UserController.php 中): 好的,就像我说的,注意:'"class UserController extends Controller"' 而不是 '"class UserController extends BaseController"' 哼,给你的示例代码在这里工作:/。不要忘记在任何添加/删除控制器之后运行“composer dump-autoload”:Docs/Controllers 很高兴帮助你,现在用 laravel 玩得开心 :) Ok "composer dump-autoload" 成功了,但现在我得到以下错误: FatalErrorException: Error: Class 'Controllers\Backend\View' not found on this line of code: return View:: make('backend.user.login');

以上是关于路由到子文件夹中的控制器在 Laravel 4 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

路由到 Laravel 5 子文件夹中的控制器

Laravel 5.4 路由器中的条件设置控制器

laravel 5中的子文件夹路由

laravel中的路由

Laravel 路由到控制器动作

在 Laravel 4 中访问包控制器