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

时间:2013-06-08 17:03:54

标签: php laravel laravel-4

我很难让这里定义的Restful路线(Laravel Documentation: Restful Controllers)正常工作。

我可以让创建表单和索引(所有视图)正常工作但我无法获得单个项目的链接以正常工作。 getShow

我已将路由定义为restful,因此它应该使用routes.php中的自动路由:

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

这是我的控制器PeopleController.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

但每当我去像人/ 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功能可能不那么有用,因为文档很缺乏。反正有没有获得OLD第3版文档?

如果有人能看到我做错了什么,我真的很感激。根据文档似乎是正确的,但它并没有详细说明这是如何工作的。 :(作为Laravel的新手,我不确定我是否只是缺少某些东西,或者文档是否真的没有详细说明需要做什么。

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

2 个答案:

答案 0 :(得分:2)

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

<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);  
  }

但我怀疑那是你想要的

我打赌只是更改链接,如上所述,将解决您的问题:)

答案 1 :(得分:0)

我会使用资源路由:http://laravel.com/docs/controllers#resource-controllers 控制器是RESTful的,更容易理解。我使用控制器路由的唯一地方是处理任意项的控制器,如PagesController。这样,您就可以通过一致的方式访问自己的网页。