我很难让这里定义的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。这样你就有一个一致的方式访问你的页面。