I just can't finger this out . I did a lot of googling and laravel Docs reading.
User.php
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends \TCG\Voyager\Models\User
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'username'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function msgs()
{
return $this->hasMany('App\Msg')->latest();
}
public function getRouteKeyName()
{
return 'username';
}
}
Msg.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Msg extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
public function getRouteKeyName()
{
return 'link';
}
}
web.php
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', 'MsgsController@index');
Auth::routes();
// Route::resource('{user:username:user:usernamename}/{img:link}', 'MsgsController');
Route::get('/profile', 'ProfileController@index')->name('home');
Route::group(['prefix' => 'admin'], function () {
Voyager::routes();
});
Route::Get('/{user:username}', 'MsgsController@index');
Route::Get('/{user:username}/create', 'MsgsController@create')->name('create'); // {user:username}/add
Route::Post('/{user:username}/{msg:link}', 'MsgsController@store')->name('store');
Route::GET('/{user:username}/{msg:link}', 'MsgsController@show')->name('show');
Route::GET('/{user:username}/{msg:link}/edit', 'MsgsController@edit')->name('edit');
Route::PUT('/{user:username}/{msg:link}', 'MsgsController@update')->name('update');
Route::DELETE('/{user:username}/{msg:link}', 'MsgsController@destroy')->name('destroy');
MsgsController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
// use Illuminate\Support\Facades\DB;
use App\Msg;
use App\User;
class MsgsController extends Controller
{
public function __construct()
{
$this->middleware('auth', ['except' => ['index', 'show']]);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index($id)
{
// $msgs = Msg::orderBy('created_at', 'desc')->get();
// $msg = Msg::orderBy('created_at', 'desc')->get();
// return view('msgs')->with('msg', $msg);
$msg = Msg::find($id);
$user_id = Auth::id();
$user = User::find($user_id);
return view('msgs')
->with('msg', $msg)
->with('user', $user);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$user_id = Auth::id();
$user = User::find($user_id);
return view('createmsg')->with('user', $user);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'body' => 'required',
]);
// Create Msg
$msg = new Msg;
$msg->user_id = auth()->user()->id;
$msg->link = bin2hex(random_bytes(3)).time();
$msg->body = $request->input('body');
$msg->ip = $request->ip();
$msg->msg_id = null;
$msg->is_active = 1;
$msg->save();
return redirect('/profile')->with('success', 'Send'); // /{username}/{link}
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($msg)
{
$msg = Msg::find($msg);
$user_id = Auth::id();
$user = User::find($user_id);
return view('showmsg')
->with('msg', $msg)
->with('user', $user);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$msg = Msg::find($id);
$user_id = Auth::id();
$user = User::find($user_id);
return view('editmsg')
->with('msg', $msg)
->with('user', $user);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request, [
'body' => 'required',
]);
// Create Msg
$msg = Msg::find($id);
$msg->user_id = auth()->user()->id;
$msg->link = bin2hex(random_bytes(3)).time();
$msg->body = $request->input('body');
$msg->ip = $request->ip();
$msg->msg_id = null;
$msg->is_active = 1;
$msg->save();
return redirect('/profile')->with('success', 'Send'); // /{username}/{link}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$msg = Msg::find($id);
$msg->delete();
return redirect('/profile')->with('success', 'Send');
}
}
ProfileController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; // i added from https://laravel.com/docs/7.x/authentication#retrieving-the-authenticated-user
use App\User;
class ProfileController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
$user_id = Auth::id();
$user_id = Auth::id();
$user = User::find($user_id);
return view('profile')->with('msgs', $user->msgs);
}
}
createmsg.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<h1>Create.blade.php</h1>
<div class="card">
<div class="card-header">Write Msg</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
{{-- You are logged in! --}}
{!!Form::open(['action' => ['MsgsController@store' , $user->username], 'method' => 'POST', 'enctype' => 'multipart/form-data'])!!}
{{Form::bsTextArea('body', '', ['placeholder' => 'msg text'])}}
<input type="submit" value="Senddd" class="btn btn-primary btn-lg" id="send">
{!!Form::close()!!}
</div>
</div>
</div>
</div>
</div>
@endsection
editmsg.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<h1>editmsg.blade.php</h1>
<div class="card">
<div class="card-header">Edit Msg</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
{{-- You are logged in! --}}
{!!Form::open(['action' => ['MsgsController@update' , $msg->id], 'method' => 'POST', 'enctype' => 'multipart/form-data'])!!}
{{Form::bsTextArea('body', $msg->body , ['placeholder' => 'Msgs Text'])}}
{{Form::hidden('_method', 'PUT')}}
<input type="submit" value="Sendd" class="btn btn-primary btn-lg" id="send">
{!!Form::close()!!}
</div>
</div>
</div>
</div>
</div>
@endsection
msgs.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<h1>msgs.blade.php</h1>
<div class="card">
<div class="card-header">msgs</div>
{{-- {{dd($msg)}} --}}
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
{{-- You are logged in! --}}
@if (count($msgs))
<ul class="list-groug">
@foreach ($msgs as $msg)
{{-- <li class="list-group-item"><a href="{{route('show', $msg->link)}}">{{$msg->body}}</a></li> --}}
<a href="{{ route('show', $msg->id) }}">{{$msg->body}}</a>
@endforeach
</ul>
@else
<p>There is no Msg</p>
@endif
</div>
</div>
</div>
</div>
</div>
@endsection
profile.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<h1>Profile.blade.php</h1>
<div class="card">
<div class="card-header">Dashboard</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
{{-- You are logged in! --}}
<h3>your Msgs</h3>
@if (count($msgs))
<table class="table table-striped">
<tr>
<th>Msg</th>
<th></th>
<th></th>
</tr>
@foreach ($msgs as $msg)
<tr>
<td>{{$msg->body}}</td>
<td><a class="btn btn-primary" href="/d/{{$msg->id}}/edit">Edit</a></td>
<td>
{!!Form::open(['action' => ['MsgsController@destroy' , $msg->id], 'method' => 'POST', 'enctype' => 'multipart/form-data', 'onsubmit' => 'return confirm("Are yOU sURE??")'])!!}
{{Form::hidden('_method', 'DELETE')}}
<input type="submit" value="Deleteee" class="btn btn-danger btn-lg" id="send">
{!!Form::close()!!}
</td>
</tr>
@endforeach
</table>
@endif
</div>
</div>
</div>
</div>
</div>
@endsection
showmsg.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<h1>Showmsg.blade.php</h1>
<div class="card">
<div class="card-header">MSG</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
{{-- You are logged in! --}}
<div class="well">
{{$msg->body}}
</div>
</div>
</div>
</div>
</div>
</div>
@endsection