【问题标题】:Laravel Restful Resource Controller routing getShow()Laravel Restful 资源控制器路由 getShow()
【发布时间】:2013-06-04 19:22:51
【问题描述】:

我很难让此处定义的 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

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

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

【问题讨论】:

  • 试试 people/show/1 因为getIndex方法声明中没有参数

标签: php laravel laravel-4


【解决方案1】:

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

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

但我怀疑这就是你想要的

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

【讨论】:

  • 我会使用{{ url('people/show', $people-&gt;people_id) }},您可以将参数传递给函数而无需字符串连接。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 2014-10-08
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2014-07-08
    • 2018-01-16
    相关资源
    最近更新 更多