【问题标题】:admin/dashboard a defind route not operating管理员/仪表板定义的路线未运行
【发布时间】:2019-12-11 18:36:06
【问题描述】:

两年后我开始编程,从 zendframework2 切换到 laravel。我正在关注在早期版本的 laravel 中制作的 youtube 教程。我在 web.php 中定义了一个简单的路由

这给了我一个 admin/dashboard

的工作 url

我一直在这个项目中使用它,直到我在我的 slider.blade.php 中使用它

路由管理/仪表板适用于 Request::is 但不适用于 href 路由。我收到未定义管理员/仪表板的错误。但它在 web.php 和 php artisan route:list 中定义为 admin/dashboard。我还尝试在 web.php 中的 Route::group 之外定义 admin/dashboard 并使用 admin.dashboard 但我无法摆脱这一点。 可能是

HTML:

<li class="{{ Request::is('admin/dashboard*')? 'active':''}} ">
    <a class="nav-link" href="{{route('admin/dashboard')}}"> <i class="material-icons">dashboard</i> <p>Dashboard</p> </a> 
</li>

路线:

Route::group(['middleware' => 'auth'], function () { 
    Route::get('dashboard', ['as' => 'dashboard', 'uses' => 'Admin\DashboardController@index'])->name('admin.dashboard'); 
});

web.php

    <?php

    /*
    |--------------------------------------------------------------------------
    | Web Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register web routes for your application. These
    | routes are loaded by the RouteServiceProvider within a group which
    | contains the "web" middleware group. Now create something great!
    |
    */

    Route::get('/', function () {
        return view('welcome');
    });

    Auth::routes();


    //beneath is the route that can work both for auth and non auth for admin/
    Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () {


        Route::group(['middleware' => 'auth'], function () {
            Route::get('dashboard', ['as' => 'dashboard', 'uses' => 'Admin\DashboardController@index'])->name('admin.dashboard');
            Route::resource('slider', 'Admin\SliderController');
        });

    });

【问题讨论】:

  • Route::group(['middleware' => 'auth'], function () { Route::get('dashboard', ['as' => 'dashboard', 'uses' => 'Admin\DashboardController@index'])->name('admin.dashboard'); });
  • stackoverflow 没有让我在问题中添加代码,所以我不得不在这里添加,抱歉
  • 你能在这里添加你的 web.php 文件代码吗?
  • Seeker,单击edit 编辑您的问题并添加您放入 cmets 的代码。
  • 标签: php laravel


    【解决方案1】:

    路由助手接受路由名称,试试这个:

    href="{{ route('admin.dashboard') }}
    

    https://laravel.com/docs/5.8/helpers#method-route

    【讨论】:

    • 先生,我已经试过了,但它不起作用,Route [admin.dashboard] 未定义
    • 这是因为这部分:['as' =&gt; 'dasboard'] 它在组内的所有路由名称前加上仪表板。所以你的路由名称现在是dashboardadmin.dashboard
    • 感谢您抽出宝贵时间,先生,我尝试使用此解决方案只是为了更好地理解,但我没有定义 Route [dashboardadmin.dashboard]
    【解决方案2】:

    对于 Laravel 中的内部链接,您必须在“href”中的路由之前添加一个“/”。并且基本上你不需要在 "href" 中调用 "route" 方法,因为 Laravel 会自动确定它是哪条路由。试试这个:

    <a class="nav-link" href="/admin/dashboard"> 
    

    【讨论】:

    • 谢谢您,先生,这是我唯一没有尝试过的组合,但它也给出了 Route [/admin/dashboard] not defined 的错误。
    • 也试试这个:
    • 谢谢你,先生,它就像一个魅力。请更新您的答案,因为这是正确的答案。您能否提及它在不使用路由的情况下是如何工作的,因为它也使用路由但使用另一个控制器。
    • 再次感谢先生,您知道不使用路由是如何工作的吗?如果您在答案中也提到它,它将帮助其他访问此答案的人
    • @Seeker,如果您无法通过路由助手route('admin.dashboard') 获取链接,您的web.php 文件仍然存在问题。
    【解决方案3】:

    您定义的路线:

    Route::group(['middleware' => 'auth'], function () { 
    Route::get('dashboard', [
            'as' => 'dashboard', 
            'uses' => 'Admin\DashboardController@index'
        ])->name('admin.dashboard'); 
    });
    

    产生/dashboard 链接和route('admin.dashboard') 命名路由,它们都没有被使用。解决方案可以使用/dashboard 作为链接,使用route('admin.dashboard') 作为命名路由,如下所示:

    <li class="{{ Request::is('/dashboard')? 'active':''}} ">
        <a class="nav-link" href="{{route('admin.dashboard')}}">
            <i class="material-icons">dashboard</i> <p>Dashboard</p>
        </a> 
    </li> 
    

    假设你的组路由没有前缀。

    【讨论】:

    • 哦,是的,先生,我的路线在 web.php 中的组中
    • 对不起,我的意思是前缀,怎么样?现在可以用了吗?
    【解决方案4】:

    使用

    <a class="nav-link" href="/admin/dashboard"> 
    

    只能解决您的路由问题,但不能解决它。

    如果您按照上面的链接,它可以让您获得正确的视图,而 Laravel 不会抛出任何错误,那么您就是一步 接近解决路线问题。这意味着存在具有该 front-end 名称的路由。但是,从我下面的解释中,您会发现 server-side 名称是 admin.dashboardadmin.dashboard

    那么,让我们开始解决问题吧。

    as 键不会替换您的路由名称,它会将它们组合在一起。因此,只使用其中一种方法 - 内部路由定义中的 as 键或 -&gt;name() 方法。

    我正在使用我自己的机器在 Laravel 5.8 上对此进行测试,并且可以确认您可以在代码中使用这两者。但是,您的代码中路由的名称是 - admin.dashboardadmin.dashboard - 令人惊讶。

    以下任何一个路由定义都应该可以解决问题:

    //beneath is the route that can work both for auth and non auth for admin/
    Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () {
    
        Route::group(['middleware' => 'auth'], function () {
    
            Route::get('dashboard', ['as' => 'dashboard', 'uses' => 'Admin\DashboardController@index']);
    
            Route::resource('slider', 'Admin\SliderController');
        });
    
    });
    

    //beneath is the route that can work both for auth and non auth for admin/
    Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () {
    
        Route::group(['middleware' => 'auth'], function () {
    
            Route::get('dashboard', ['uses' => 'Admin\DashboardController@index'])->name('dashboard');
    
            Route::resource('slider', 'Admin\SliderController');
        });
    
    });
    

    不管怎样,生成的前端链接应该是

    admin/dashboard
    

    而服务器端访问链接的路由是

    route('admin.dashboard')
    

    html 应该是:

    <li class="{{ Request::is('admin/dashboard*')? 'active':''}} ">
        <a class="nav-link" href="{{route('admin.dashboard')}}">
            <i class="material-icons">dashboard</i> 
            <p>Dashboard</p> 
        </a> 
    </li>
    

    注意:不要通过将生成的路由链接直接放入浏览器地址栏来测试它们。将它们放在链接href 中,浏览器将绝对或相对解析它们 - 取决于链接类型。

    【讨论】:

    • 但它与问题中的路线不同。
    • 路由中的as 键也可以删除。然后,您可以使用 -&gt;name('admin.dashboard') 方法为您提供 route('admin.dashboard') 作为有效路由。我只是想展示在路由定义中使用as 键的正确方法。
    • UdoE 先生,您的工作非常出色,答案令人惊叹,您不仅提供了详细的解决方案,还强调了概念上的困难并提供了他们的解决方案。我已经检查了您在此答案中提到的所有内容。 1)使用我的旧代码,我的路线是 admin.dashboardadmin.dashboard 并且也在工作。 2) 仅使用 'as' 解决问题 3) 仅使用 name-> 解决问题。现在我只在 sidebar.blade.php href="{{route('admin.dashboard')}}" 的路线中使用这条路线 我也尝试使用 admin/dashboard 但仍然返回 'not defined' 和 'as '或'名称'。
    • 我仍然想知道,我如何在 Request:: 中使用 admin/dashboard,但不能在 route() 中使用 admin/dashboard
    • @Seeker,很高兴您能更好地理解问题并解决问题。通常,您提供给Route::get() 的第一个参数可以用于两个目的。如果关联的控制器方法返回view,它可以只是路由的前端显示名称,或者如果控制器没有返回视图,它可以是视图的实际相对部分。我认为静态 Request:: 调用使用的是前端显示链接而不是实际路由
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签