0

我很难让此处定义的 Restful 路由(Laravel 文档: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

但是,每当我转到诸如 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 的新手,我不确定我是否只是遗漏了一些东西,或者文档是否真的没有详细说明需要做什么。

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

4

2 回答 2

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

但我怀疑这就是你想要的

我敢打赌,如上所述,只需更改链接即可解决您的问题:)

于 2013-06-09T02:44:36.993 回答
0

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

于 2014-07-30T03:19:14.323 回答