【发布时间】:2014-12-15 02:41:20
【问题描述】:
我在试用 Laravel 5 时遇到了一点问题。
我按照 laracasts 中的整个教程进行操作,并尝试以与他们在那里完全相同的方式进行所有操作,只是我更改了模型、表和控制器的名称。
在某些时候 Route::bind() 停止工作,因此,现在当我尝试使用通配符访问路线时,会出现视图,但没有数据。
这是我的 routes.php
Route::bind('singers', function($slug, $route){
return App\Singer::whereSlug($slug)->first();
});
Route::resource('singers', 'SingerController', [
'names' => [
'index' => 'singers_index',
'show' => 'singers_show',
'edit' => 'singers_edit',
'update' => 'singers_update',
'create' => 'singers_create',
'store' => 'singers_store',
'destroy' => 'singers_destroy',
],
]);
这些是我的 SingerController
的一些 sn-psnamespace App\Http\Controllers;
use Illuminate\Routing\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\CreateSingerRequest;
use App\Singer;
class SingerController extends Controller {
public $restful = true;
public function __construct(Singer $singer){
$this->singer = $singer;
}
public function index()
{
$singers = $this->singer->orderBy('id', 'DESC')->get();
return view('singers.list',compact('singers'));
}
public function show(Singer $singer){
return view('singers.show', compact('singer'));
}
public function edit(Singer $singer){
return view('singers.edit', compact('singer'));
}
public function update(Singer $singer, Request $request){
$singer->fill($request->input());
$singer->save();
return view('singers.show', compact('singer'));
}
public function create(){
return view('singers.new');
}
public function store(Singer $singer, CreateSingerRequest $request){
$singer->create($request->all());
return redirect()->route('singers_index');
}
public function destroy(Singer $singer){
$singer->delete();
return redirect()->route('singers_index');
}
}
现在。我尝试在 routes.php 中绑定变量 'singers' 的原因是因为他们在视频中这样做,这样,Controller 中的代码就更短了。它确实有效。然后我只是添加了破坏功能,它都停止了工作。 正如我所说,我可以看到视图、标签和其中的任何其他文本,但看不到我传递的数据,除了索引函数,因为我实际上是在函数本身中进行 Eloquent 搜索。
现在这是我的 show.blade.php 的 sn-p
<b>Full Name: </b> {{ $singer->name.' '.$singer->lastname }}
<br>
<b>Age: </b> {{ $singer->age }}
<br>
<b>Country: </b> {{ $singer->country }}
<br>
<br>
<p>
<b>Bio: </b> {!! nl2br($singer->bio) !!}
</p>
{!! HTML::linkRoute('singers_edit', 'Update', [$singer->slug], ['class' => 'btn btn-primary']) !!}
{!! Form::open(['method'=>'DELETE', 'route'=>['singers_destroy', $singer->slug]]) !!}
<div class="form-group">
{!! Form::submit('Delete', ['class'=>'btn btn-danger']) !!}
</div>
{!! Form::close() !!}
我的索引视图工作正常,其他视图只是表单,但是我传递变量的任何视图都不起作用,无论我是通过这样做传递它:
return view('singers.show',compact('singer'));
或者这个:
return view('singers.show')->with('singer',$singer);
回顾一下:
- 索引 -> 很好。
- 显示 -> 不会显示任何数据。
- create -> 实际有效,新记录已保存。
- edit -> 出现错误,因为通配符未发送到 控制器。
编辑
路径
- 索引 (GET):/singers
- 显示 (GET):/singers/{singers}
- 创建 (GET):/singers/create
- 存储 (POST):/singers
- 编辑 (GET):/singers/{singers}/edit
- 更新(补丁):/singers/{singers}
- 销毁(删除):/singers/{singers}
请记住,{singers} 通配符在每种情况下实际上都是 $singer->slug,但是 Route::bind() 函数不允许我随意调用它。 当然,在第一个斜线出现之前 myserver/myproject/public
【问题讨论】:
-
您使用什么网址进行显示和更新?
-
显示路线 -> localhost/project/public/singers/{singers} 并编辑路线 -> localhost/project/public/singers/{singers}/edit 我将编辑我的帖子,以便您看到他们更好
标签: laravel model-binding blade laravel-routing laravel-5