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の一部です
namespace 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' をバインドしようとする理由は、彼らがビデオでそれを行っているためです。そうすれば、コントローラーのコードが短くなります。そして、それは実際に機能していました。そして、破棄機能を追加しただけで、すべてが機能しなくなりました。前述したように、ビュー、タグ、その他のテキストは表示されますが、関数自体で Eloquent 検索を実際に実行するため、index 関数を除いて、渡すデータは表示されません。
これが私のshow.blade.phpのスニペットです
<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