【问题标题】:Define Laravel 5 route inside subfolder and display it via controller在子文件夹中定义 Laravel 5 路由并通过控制器显示
【发布时间】:2017-01-14 19:50:24
【问题描述】:

我有 Laravel 5.2.45 应用程序。 我有这样的控制器结构:

App
    Http
        Controllers
            Admin
                AdminController.php

在 AdminController.php 我有

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests;

class AdminController extends Controller 
{

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct() 
{
    $this->middleware('auth');
    $this->middleware('is.admin');
}

public function index()
{
    return view('admin.home');
}

}

我有这样的视图文件夹结构:

views
    admin
        home.blade.php

在我的 routes.php 里面我有

Route::get('/admin/home', 'Admin\AdminController@index');

所以当我键入 .../admin/home 时,我试图在 admin 文件夹中显示 home.blade.php。

我的路线.php:

Route::auth();

Route::get('/', 'FrontController@index');

Route::get('/home', 'FrontController@index');

Route::get('/add_user', 'FrontController@user');

Route::group(['prefix', 'admin', 'namespace' => 'Admin'], function() {
    Route::get('home', 'AdminController@index');
});

【问题讨论】:

  • 删除前导斜杠,使其变为:Route::get('admin/home', 'Admin\AdminController@index');

标签: php laravel routes laravel-5.2 laravel-routing


【解决方案1】:

您的路由定义中缺少前缀。更正它看起来像这样:

<?php
   Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function() {
       Route::get('/home', 'AdminController@index');
   });

现在,在浏览器中尝试 base_url/admin/home,它应该可以工作。

【讨论】:

    【解决方案2】:

    您可以使用带有命名空间和前缀选项的路由组。

    Route::group(['prefix' => 'admin', 'namespace' => 'Admin'], function() {
        Route::get('home', 'AdminController@index');
    });
    

    在这里,prefix 允许您指定应始终位于组内路由中的 URL 的开头。因此,您放入该组中的任何路由都应以 admin 开头。

    命名空间允许您为您引用的控制器指定一个文件夹/命名空间。所以所有的控制器都必须在App\Http\Controllers\Admin命名空间和app/Http/Controllers/Admin文件夹下。

    【讨论】:

    • 我刚刚这样做了,我在 RouteCollection.php 第 161 行中得到 NotFoundHttpException:我在浏览器中输入了 localhost:8888/project/public/admin/home 控制器,并且视图位于正确的文件夹中,正如我在问题中提到的那样,我尝试使用返回视图 admin.home , admin/home, home 但没有任何作用
    • 你能发布你的路由文件的内容吗?
    • 我们都错过了错误 - 'prefix' => 'admin' 而不是 'prefix', 'admin' 但是感谢您的好建议
    【解决方案3】:

    您需要删除前导正斜杠,使其变为:

    Route::get('admin/home', 'Admin\AdminController@index');

    【讨论】:

    • 这不能解决问题,Laravel 在注册路由时会剪掉任何多余的前导斜杠。
    • 是的,这不起作用。和以前一样的问题。我已经尝试了每种组合。 /admin/home, /home, home, admin/home, admin.home...
    猜你喜欢
    • 1970-01-01
    • 2013-09-21
    • 2015-10-24
    • 2015-05-14
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多