2017-04-17 27 views
1

私は管理者がCRUD投稿を行うことができる管理ダッシュボードを含むアプリケーションを作成しようとしていますが、ユーザーが投稿した投稿を見ることもできます。 一方、ゲストは投稿を見ることができますが、ユーザーは投稿投稿を作成することができます。ユーザーが投稿したLaravelを使用した投稿

これまで、私は投稿機能機能を有効にすることができましたが、ユーザー投稿機能は利用できません。

マイコントローラー:

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Usp; 

class AdminUserPostsController extends Controller 
{ 
    public function index() 
    { 
     $userposts = Usp::orderBy('id', 'desc')->paginate(10); 
     return view('admin.userposts.archive')->withUsp($userposts); 
    } 

    public function show($id) 
    { 
     $userpost = Usp::find($id); 
     return view('admin.userposts.show')->withUsp($userpost); 
    } 
} 

マイモデル

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Usp extends Model 
{ 
    // 
} 

私のアーカイブを表示

@extends('admin') 
@section('dashboard-content') 
<div class="col-md-8 offset-md-2"> 
    <h1>Posts Archive</h1> 
    <hr> 
</div> 
@foreach ($userposts as $userpost) 
<div class="col-md-6 offset-md-2"> 
<h3>Title: {{ $userpost->title }}</h3> 
<hr> 
</div> 
@endforeach 
@endsection 

と(特定のコントローラ用)マイルート

Route::get('/admin/userposts', '[email protected]')->name('admin.userposts.archive'); 
Route::get('/admin/userposts/{id}', '[email protected]')->name('admin.userposts.show'); 

userposts変数が定義されていないというエラーが表示されますが、コントローラで定義しています。助けることができる人は誰ですか?あなたがuserposts変数を使用したい場合は

答えて

0

変数をビューに "送信"する必要があります。これを行うにはいくつかの方法がありますが、最も一般的なのは「コンパクト」を使用することです。あなたのケースでは、あなたはそれが動作しませんどのようにこの

return view('admin.userposts.archive')->with(compact('userposts')); 

するために、この

return view('admin.userposts.archive')->withUsp($userposts); 

を変更する必要があります。

compact("varname", [...]) 

はキーが変数名とされて配列を返します値は変数値です

そして、ちょうどtビュー

PSへのすべての配列ransmits:

compact('userposts') 

この

['userposts' => $userposts] 
+0

とまったく同じものですので、多くのすべてのあなたのありがとう!また、説明に感謝します。私の店舗機能はどうですか?私はこのコードでリダイレクトする必要があります。 'return redirect() - > route( 'admin.userposts.show'、$ userpost-> id);'私は 'return redirect() - > route( 'admin。 ( 'userposts.show'、compact( 'userpost'、 'id')); 'しかし、それは動作しません:( –

+1

ルート機能はまったく同じように動作しません。あなたが '$ userpost-> id'で行ったのと同じように、あるいは完全なオブジェクトのために行くことができ、フレームワークはどの値を取るかを決定します(デフォルトではidです)。列を変更すると、[暗黙的なバインディング](https://laravel.com/docs/5.4/routing#implicit-binding)列を変更できます。複数のパラメータを持つ場合は、配列を渡す必要があります。 –

+1

さらに、 'compact( 'userpost'、 'id')'を説明するだけで、実際には '$ userpost'と' $ id'の2つの変数があります。あなたはそれらを持っていた両方とも定義されていれば '['userpost' => $ userpost、 'id' => $ id]' –

0

、次の操作を行います。

return view('admin.userposts.archive', compact('userposts'); 

またはこの:

return view('admin.userposts.archive', ['userposts' => $userposts]); 
0

変更この:

return view('admin.userposts.show')->withUsp($userpost); 

return view('admin.userposts.show', array('userpost' => $userpost)); 
への

してもう一度お試しください。それが配列である場合は、その要素のすべてを取得するためにforeach()を使用

{{ $userpost }}

:あなたは次のようにブレードビューに$userpostを得ることができます。

関連する問題