Laravel Restful资源控制器路由getShow()


Laravel Restful Resource Controller routing getShow()

我很难让这里定义的Restful路由(Laravel文档:Restful控制器)正常工作。

我可以得到创建表单和索引(所有的视图)正常工作,但我不能得到链接到一个项目正常工作。getShow

我已经将我的路由定义为restful,所以它应该在我的routes.php中使用自动路由:

// People
Route::controller('people', 'PeopleController');

这是我的控制器peopleconcontroller。php:

<?php
class PeopleController extends BaseController {
    public $restful = true;
    public function getIndex()
    {   

        return View::make('people.index')
            ->with('people', $people);          
    }
    public function getShow($id)
    {   
    return 'success! it finally worked!';   
    }

    public function getCreate()
    {
        return View::make('people.create');
    }
    public function postStore()
    {
            return Redirect::to('people')
                ->with('success', 'Person added successfully');
     }
}

这是我的index.blade.php模板,它应该链接到show.blade.php模板:

<ul class="thumbnails">
    @foreach ($people as $people)
    <li> <a href="{{ URL::to('people/' . $people->people_id) }}" class="thumbnail"> <img src="https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-ash4/s200x200/486010_633561579994787_1827482783_n.jpg" /> </a>
        <div class="caption">
            <p> {{ $people->people_id }}<br />
            {{ $people->firstname }}<br />
                {{ $people->lastname }}<br />
                {{ $people->line1 }}<br />
                {{ $people->city }}<br />
                <br />
                {{ $people->state }} {{ $people->zip }}<br />
                {{ $people->country }} </p>
            <p>
                <button class="btn btn-small btn-primary" type="button">Actions</button>
                <button class="btn btn-small" type="button">View</button>
            </p>
        </div>
    </li>
    @endforeach
</ul>

我创建了一个名为show.blade.php的视图。

@extends('master')
@section('title')
@parent
:: Home
@stop
@section('content')
<p>it finally worked!</p>
@stop

但是每当我去到一个项目,比如people/1,我就会得到一大堆错误:。

Symfony'Component'HttpKernel'Exception'NotFoundHttpException
…'vendor'laravel'framework'src'Illuminate'Routing'Controllers'Controller.php290
Illuminate'Routing'Controllers'Controller missingMethod
<#unknown>0
call_user_func_array
…'vendor'laravel'framework'src'Illuminate'Routing'Controllers'Controller.php138
Illuminate'Routing'Controllers'Controller callMethod
…'vendor'laravel'framework'src'Illuminate'Routing'Controllers'Controller.php115
Illuminate'Routing'Controllers'Controller callAction
…'bootstrap'compiled.php9980
Illuminate'Routing'{closure}
<#unknown>0
call_user_func_array
…'bootstrap'compiled.php16626
Illuminate'Routing'Route callCallable
…'bootstrap'compiled.php16605
Illuminate'Routing'Route run
…'bootstrap'compiled.php10000
Illuminate'Routing'Router dispatch
…'bootstrap'compiled.php1010
Illuminate'Foundation'Application dispatch
…'bootstrap'compiled.php993
Illuminate'Foundation'Application run
…'public'index.php49
在这一点上,我已经剥离了我的代码,只是为了让它工作。我发现,由于缺乏相关文档,RESTful特性可能没有多大帮助。有没有办法找到旧版本3的文档?如果有人能看出我做错了什么,我将非常感激。这似乎是正确的按照文件,但它没有详细说明这是如何工作的。作为Laravel的新手,我不确定是我错过了什么,还是文档真的没有详细说明需要做什么。

创建自己的路由而不是尝试使用内置函数会更好吗?谢谢你的帮助。

您需要将链接更改为....

<a href="{{ URL::to('people/show/' . $people->people_id) }}">

以便触发getShow()方法,该方法将接受您的参数$id。

你现在的方式是,它会转到people/1,它只会弹出getIndex(),它不接受任何参数,因此你的错误。

如果你想让people/1做点什么,那么你可以把getIndex()函数改成.....

function getIndex($id=null){
    if($id==null){
       $people = People::all();           
     } else {
       $people = People::find($id);
     }
    return View::make('people.index')
    ->with('people', $people);  
  }

但我怀疑这是你想要的

我打赌只要改变链接,正如我上面提到的,将解决你的问题:)

我会使用资源路由:http://laravel.com/docs/controllers#resource-controllers控制器是RESTful的,并且更容易理解。我使用控制器路由的唯一地方是处理任意项的控制器,比如PagesController。这样你就有一个一致的方式访问你的页面。