我很难让这里定义的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的新手,我不确定我是否只是缺少某些东西,或者文档是否真的没有详细说明需要做什么。
创建自己的路线而不是尝试使用内置函数会更好吗?谢谢你的帮助。
答案 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。这样,您就可以通过一致的方式访问自己的网页。