Laravel 4 PHP:路由订单问题


Laravel 4 PHP: Routes Order Issue

编辑:我使用的是Laravel 4 PHP,最初我认为这个问题与网页上的"link_to_route"方法有关,所以你可以简单地链接到另一个不包含任何动态数据的网页。

然而,我发现,您列出路线的顺序将最终决定您的路线是否成功到达。

Authors2.php(控制器)

class Authors2_Controller extends BaseController {
public $restful = true;
public function contact() {
    return View::make('authors2.index')
    ->with('title','Authors and Books')
    ->with('authors2', Author2::orderBy('name')->get());
}
public function getnew() {
    return View::make('authors2.new')
        ->with('title', 'Add New Author');
}

Routes.php

Route::get('authors2', array('as'=>'authors2', 'uses' =>'Authors2_Controller@contact'));
Route::get('authors2/new', array('as'=>'new_author', 'uses'=>'Authors2_Controller@getnew'));

index.blade.php(视图)

@extends('layouts.default')
@section('content')
<h1>Authors2 Home Page </h1>
<ul>
@foreach($authors2 as $author2)
    <li>{{ link_to_route('author2', $author2->name, $parameters = array($author2->id)) }}</li>
@endforeach 
</ul>
<p>{{ link_to_route('new_author', 'Add Author') }} </p>
@endsection

当我点击"添加作者"链接时,我会收到错误"试图获取非对象的属性"错误。

编辑:因此,现在当我更改路由的顺序时,如果我在"authors2"路由之前列出"authors2/new"路由,则该路由将实际工作:

Route::get('authors2/new', array('as'=>'new_author', 'uses'=>'Authors2_Controller@getnew'));
Route::get('authors2', array('as'=>'authors2', 'uses' =>'Authors2_Controller@contact'));    

这是否必须处理Routes最初是如何被接收的?如果是,为什么会发生这种情况?

如@Barry_127所述,Laravel将根据最具体到最不具体的路线进行匹配。因此,按照这个顺序列出路线是一个很好的做法。