Add view for posts
Add login with username instead of email Add blog post seeder with Factory
This commit is contained in:
parent
b52915b8f4
commit
9a4030f19a
@ -3,10 +3,10 @@
|
|||||||
namespace App;
|
namespace App;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use SoftDeletes;
|
||||||
|
|
||||||
class BlogPost extends Model
|
class BlogPost extends Model
|
||||||
{
|
{
|
||||||
use SoftDeletes;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The attributes that are mass assignable.
|
* The attributes that are mass assignable.
|
||||||
|
@ -37,4 +37,12 @@ class LoginController extends Controller
|
|||||||
{
|
{
|
||||||
$this->middleware('guest')->except('logout');
|
$this->middleware('guest')->except('logout');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify field that's used in the login form.
|
||||||
|
*/
|
||||||
|
public function username()
|
||||||
|
{
|
||||||
|
return 'username';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,7 @@ class RegisterController extends Controller
|
|||||||
{
|
{
|
||||||
return Validator::make($data, [
|
return Validator::make($data, [
|
||||||
'name' => ['required', 'string', 'max:255'],
|
'name' => ['required', 'string', 'max:255'],
|
||||||
|
'username' => ['required', 'string', 'unique:users', 'min:3', 'max:30'],
|
||||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||||
'password' => ['required', 'string', 'min:8', 'confirmed'],
|
'password' => ['required', 'string', 'min:8', 'confirmed'],
|
||||||
]);
|
]);
|
||||||
@ -66,6 +67,7 @@ class RegisterController extends Controller
|
|||||||
{
|
{
|
||||||
return User::create([
|
return User::create([
|
||||||
'name' => $data['name'],
|
'name' => $data['name'],
|
||||||
|
'username' => strtolower($data['username']),
|
||||||
'email' => $data['email'],
|
'email' => $data['email'],
|
||||||
'password' => Hash::make($data['password']),
|
'password' => Hash::make($data['password']),
|
||||||
]);
|
]);
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\BlogPost;
|
use App\BlogPost;
|
||||||
|
use App\User;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Http\Request\BlogPostRequest;
|
use App\Http\Request\BlogPostRequest;
|
||||||
|
|
||||||
@ -11,11 +12,17 @@ class BlogPostController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Display a listing of the resource.
|
* Display a listing of the resource.
|
||||||
*
|
*
|
||||||
|
* @param string $username
|
||||||
* @return \Illuminate\Http\Response
|
* @return \Illuminate\Http\Response
|
||||||
*/
|
*/
|
||||||
public function index()
|
public function index($username)
|
||||||
{
|
{
|
||||||
//
|
$user = User::where('username', $username)
|
||||||
|
->firstOrFail();
|
||||||
|
|
||||||
|
return view('posts.index', [
|
||||||
|
'user' => $user,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -16,7 +16,7 @@ class User extends Authenticatable
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'name', 'email', 'password',
|
'name', 'username', 'email', 'password',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -7,6 +7,7 @@ use Faker\Generator as Faker;
|
|||||||
|
|
||||||
$factory->define(BlogPost::class, function (Faker $faker) {
|
$factory->define(BlogPost::class, function (Faker $faker) {
|
||||||
return [
|
return [
|
||||||
//
|
'title' => $faker->sentence(5),
|
||||||
|
'body' => $faker->paragraph(4),
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
@ -15,6 +15,10 @@ class CreateUsersTable extends Migration
|
|||||||
{
|
{
|
||||||
Schema::create('users', function (Blueprint $table) {
|
Schema::create('users', function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
|
|
||||||
|
$table->string('username', 30)
|
||||||
|
->unique();
|
||||||
|
|
||||||
$table->string('name');
|
$table->string('name');
|
||||||
$table->string('email')->unique();
|
$table->string('email')->unique();
|
||||||
$table->timestamp('email_verified_at')->nullable();
|
$table->timestamp('email_verified_at')->nullable();
|
||||||
|
@ -14,7 +14,7 @@ class CreateBlogPostsTable extends Migration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::create('blog_posts', function (Blueprint $table) {
|
Schema::create('blog_posts', function (Blueprint $table) {
|
||||||
$table->bigIncrementing('id');
|
$table->bigIncrements('id');
|
||||||
|
|
||||||
$table->string('title', 150);
|
$table->string('title', 150);
|
||||||
$table->text('body');
|
$table->text('body');
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
use App\BlogPost;
|
||||||
|
use App\User;
|
||||||
|
|
||||||
class BlogPostSeeder extends Seeder
|
class BlogPostSeeder extends Seeder
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -11,6 +14,10 @@ class BlogPostSeeder extends Seeder
|
|||||||
*/
|
*/
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
//
|
User::all()->each(function ($user) {
|
||||||
|
$user->posts()->save(
|
||||||
|
factory(BlogPost::class)->make()
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
4
public/js/app.js
vendored
4
public/js/app.js
vendored
@ -49674,8 +49674,8 @@ __webpack_require__.r(__webpack_exports__);
|
|||||||
/*! no static exports found */
|
/*! no static exports found */
|
||||||
/***/ (function(module, exports, __webpack_require__) {
|
/***/ (function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
__webpack_require__(/*! A:\Projects\HovedprosjektWebApp\resources\js\app.js */"./resources/js/app.js");
|
__webpack_require__(/*! /home/alex/projects/HovedprosjektWebApp/resources/js/app.js */"./resources/js/app.js");
|
||||||
module.exports = __webpack_require__(/*! A:\Projects\HovedprosjektWebApp\resources\sass\app.scss */"./resources/sass/app.scss");
|
module.exports = __webpack_require__(/*! /home/alex/projects/HovedprosjektWebApp/resources/sass/app.scss */"./resources/sass/app.scss");
|
||||||
|
|
||||||
|
|
||||||
/***/ })
|
/***/ })
|
||||||
|
@ -12,12 +12,12 @@
|
|||||||
@csrf
|
@csrf
|
||||||
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
|
<label for="username" class="col-md-4 col-form-label text-md-right">Username</label>
|
||||||
|
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
|
<input id="username" type="username" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required autocomplete="username" autofocus>
|
||||||
|
|
||||||
@error('email')
|
@error('username')
|
||||||
<span class="invalid-feedback" role="alert">
|
<span class="invalid-feedback" role="alert">
|
||||||
<strong>{{ $message }}</strong>
|
<strong>{{ $message }}</strong>
|
||||||
</span>
|
</span>
|
||||||
|
@ -25,6 +25,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="username" class="col-md-4 col-form-label text-md-right">Username</label>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<input id="username" type="text" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required>
|
||||||
|
|
||||||
|
@error('username')
|
||||||
|
<span class="invalid-feedback" role="alert">
|
||||||
|
<strong>{{ $message }}</strong>
|
||||||
|
</span>
|
||||||
|
@enderror
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
|
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
You are logged in!
|
You are logged in, <code>{{ Auth::user()->username }}</code>!
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
26
resources/views/posts/index.blade.php
Normal file
26
resources/views/posts/index.blade.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="container">
|
||||||
|
@if ($user->posts->isEmpty())
|
||||||
|
<div class="alert alert-info" role="alert">
|
||||||
|
<strong>{{ $user->name }}</strong> has no posts. Check back later :)
|
||||||
|
</div>
|
||||||
|
@else
|
||||||
|
@foreach ($user->posts as $post)
|
||||||
|
<div class="jumbotron">
|
||||||
|
<h3>{{ $post->title }}</h3>
|
||||||
|
<p>
|
||||||
|
{{ nl2br($post->body) }}
|
||||||
|
</p>
|
||||||
|
<p class="text-muted">
|
||||||
|
Created: {{ $post->created_at }}
|
||||||
|
@if ($post->created_at->diffInSeconds($post->updated_at) > 1)
|
||||||
|
| Last updated: {{ $post->updated_at }}
|
||||||
|
@endif
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
@endsection
|
@ -2,8 +2,9 @@
|
|||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1>Welcome to the {{ env('APP_NAME', 'Hovedprosjekt') }} homepage!</h1>
|
<div class="text-center">
|
||||||
|
<h1>Welcome to the {{ env('APP_NAME', 'Hovedprosjekt') }} homepage!</h1>
|
||||||
<img src="/media/finsrud.png" alt="GASP">
|
<img src="/media/finsrud.png" alt="GASP">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
@ -18,3 +18,7 @@ Route::get('/', function () {
|
|||||||
Auth::routes();
|
Auth::routes();
|
||||||
|
|
||||||
Route::get('/home', 'HomeController@index')->name('home');
|
Route::get('/home', 'HomeController@index')->name('home');
|
||||||
|
|
||||||
|
Route::group(['prefix' => 'posts'], function() {
|
||||||
|
Route::get('/u/{username}', ['uses' => 'BlogPostController@index']);
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user