怎么修 ?在 link 而不是 /

How to fix ? on the link instead of /

我想通过“/nameID”link将我的“name”转到其他页面。

例如:<a href='./2'>number 2</a>

我试过了:

@foreach($adverts as $advert) 
  {{link_to_route('adverts', $advert->name, array($advert->id))}} 
@endforeah

它returns我:<a href="http://localhost:8000/?2">,但我需要<a href="http://localhost:8000/2">

我哪里错了?

更多详情:

models/advert.php

class advert extends Eloquent {
    protected $table = 'adverts';
}

routes.php

Route::get('/', array('as'=>'adverts', 'uses'=>'advertsController@index'));
Route::get('/{id}', array('as'=>'advert', 'uses'=>'advertsController@info'));

controllers/advertsController.php

public function index() {
    return View::make('adverts.index')
               ->with('adverts', advert::All());
}
public function info($id) {
    return View::make('adverts.info')
               ->with('advert', advert::find($id));
}

当我将第二条路线更改为 'as'=>'adverts' 时,它工作正常。但我不知道它为什么有效。如果我理解清楚,'as'=>'advert'只是路由的具体名称,不是吗?

您需要更改路由定义并添加路径参数:

 Route::get('/', array('as'=>'adverts', 'uses'=>'advertsController@index'));
 Route::get('/{id}', array('as'=>'advert', 'uses'=>'advertsController@info'));

 {{link_to_route('advert', array('id' => $advert->id))}}

你用错了路线。您应该使用 advert(单数),因为这是采用参数的路由。如果您尝试使用索引路由 (adverts),它会将任何其他参数添加为查询字符串。

假设您有这些路线:

Route::get('/', array('as'=>'adverts', 'uses'=>'advertsController@index'));
Route::get('/{id}', array('as'=>'advert', 'uses'=>'advertsController@info'));

如果你想link个人广告,你需要使用这个:

{{ link_to_route('advert', $advert->name, array($advert->id)) }}

此外,您可能想看看 resource controllers。它们非常适合这样的情况,您希望一个 route/view 列出资源,另一个 route/view 查看特定资源的详细信息。