【问题标题】:How to reference a Laravel route in my View so that if I change the route, I will not have to update all my Views?如何在我的视图中引用 Laravel 路由,这样如果我更改路由,我就不必更新我的所有视图?
【发布时间】:2014-01-25 22:14:46
【问题描述】:

考虑以下简单示例:

// routes.php 

  // You can get this route by http://localhost/adminpanel/home ...users...etc
  Route::group(array('prefix' => 'adminpanel', 'before' => 'auth'), function(){
      Route::resource('home', 'Admin\Controllers\HomeController');
      Route::resource('users', 'Admin\Controllers\UsersController');
  });


// Admin\Views\users.php
  <!-- I do not want to update this everytime I change the route -->
  <a href="<?=URL::to('adminpanel/home');?>">Click here to go home</a>

如果我将 adminpanel 更改为我的 routes.php 中的其他内容,我还必须更改使用它的每个视图。

是否有另一种方法可以在我的视图中引用路线,或者我可以从 Laravel 自然实施任何其他好的策略?
否则我认为我可能需要将某种 CONSTANT 变量添加到我的 global.php 以可能完成此操作。

【问题讨论】:

    标签: php url routing laravel laravel-4


    【解决方案1】:

    使用路由 'as' 参数为您的路由命名:

    Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));
    

    那你只需要

    <a href="<?=URL::route('profile');?>">Click here to go home</a>
    

    使用您的资源路线,您可以列出它们

    php artisan routes
    

    并使用路线名称,第三列。

    使用您的示例,您将有 2 个基本路线:家庭和用户,这是家庭资源的列表:

    +--------+----------------------+--------------+------------------------------------------+----------------+---------------+
    | Domain | URI                  | Name         | Action                                   | Before Filters | After Filters |
    +--------+----------------------+--------------+------------------------------------------+----------------+---------------+
    |        | GET home             | home.index   | Admin\Controllers\HomeController@index   |                |               |
    |        | GET home/create      | home.create  | Admin\Controllers\HomeController@create  |                |               |
    |        | POST home            | home.store   | Admin\Controllers\HomeController@store   |                |               |
    |        | GET home/{home}      | home.show    | Admin\Controllers\HomeController@show    |                |               |
    |        | GET home/{home}/edit | home.edit    | Admin\Controllers\HomeController@edit    |                |               |
    |        | PUT home/{home}      | home.update  | Admin\Controllers\HomeController@update  |                |               |
    |        | PATCH home/{home}    |              | Admin\Controllers\HomeController@update  |                |               |
    |        | DELETE home/{home}   | home.destroy | Admin\Controllers\HomeController@destroy |                |               |
    +--------+----------------------+--------------+------------------------------------------+----------------+---------------+
    

    因此,您将使用以下方法构建该路线:

    <a href="<?=URL::route('home.index');?>">Click here to go home</a>
    

    请注意,您的组前缀 adminpanel 不会添加到您的路线名称中,您也不必使用它。创建路由所需的是命令artisan routesName 列中显示的确切名称。

    使用 Blade 你可以做到

    {{ link_to_route('home.index', 'Click here to go home') }}
    

    干净多了,对吧?

    【讨论】:

    • Antonio 你能重写我的例子来实现你的解决方案,以确保我正确理解你吗?请注意,我还使用了路由组和过滤器。
    • @DavidGraham 这些被称为命名路由:laravel.com/docs/routing#named-routes
    • 刚刚编辑给你一个使用你资源丰富的路线的例子。
    • 所以你是说我的视图中根本不需要引用路由组?我可以只命名组内的路由(使用as),或者如果它们是资源,我可以按照您的说明调用它们?我说的对吗?
    • 您不这样做,组不会附加到您的路线名称中。但是有些人要求添加它们。
    【解决方案2】:

    解决您的问题的最佳方法是使用 Antonio 建议的命名路由。 您还可以使用 link_to_route 帮助器生成指向指定路由的完整 HTML 链接。

    有关 url 助手的更多信息可以在这里找到:http://laravel.com/docs/helpers#urls

    更多关于命名路由的信息可以在这里找到:http://laravel.com/docs/routing#named-routes

    【讨论】:

    • +1 谢谢,我还没有进入 URL 助手。一直忙着整理东西。 link_to_route 看起来很有用。欣赏!
    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2021-10-03
    相关资源
    最近更新 更多