【问题标题】:Route to controller in subfolder not working in Laravel 4路由到子文件夹中的控制器在 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 还是你得到一个更有用的错误?如果您遇到错误,可以在这里发布吗?
  • 另外,您的控制器是否在命名空间中?
  • 不,控制器不在命名空间中。

标签: php controller routes laravel laravel-4


【解决方案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');
            猜你喜欢
            • 2013-06-19
            • 1970-01-01
            • 2013-09-21
            • 2017-11-16
            • 2016-12-14
            • 2013-03-13
            • 1970-01-01
            • 2015-10-17
            • 2017-05-08
            相关资源
            最近更新 更多