diff --git a/app/Http/Controllers/PostController.php b/app/Http/Controllers/PostController.php index 208f956..a0c5993 100644 --- a/app/Http/Controllers/PostController.php +++ b/app/Http/Controllers/PostController.php @@ -10,7 +10,8 @@ public function index() { return view('posts', [ "title" => "Blog", - "posts" => Post::all(), + // "posts" => Post::all(), + "posts" => Post::latest()->get(), ]); } diff --git a/app/Models/Post.php b/app/Models/Post.php index 84772f9..7d45cca 100644 --- a/app/Models/Post.php +++ b/app/Models/Post.php @@ -20,8 +20,8 @@ public function category() return $this->belongsTo(Category::class); } - public function user() + public function author() { - return $this->belongsTo(User::class); + return $this->belongsTo(User::class, 'user_id'); } } diff --git a/config/app.php b/config/app.php index 4c231b4..db2e65a 100644 --- a/config/app.php +++ b/config/app.php @@ -14,7 +14,7 @@ | framework needs to place the application's name in a notification or | any other location as required by the application or its packages. | - */ + */ 'name' => env('APP_NAME', 'Laravel'), @@ -27,7 +27,7 @@ | running in. This may determine how you prefer to configure various | services the application utilizes. Set this in your ".env" file. | - */ + */ 'env' => env('APP_ENV', 'production'), @@ -40,7 +40,7 @@ | stack traces will be shown on every error that occurs within your | application. If disabled, a simple generic error page is shown. | - */ + */ 'debug' => (bool) env('APP_DEBUG', false), @@ -53,7 +53,7 @@ | the Artisan command line tool. You should set this to the root of | your application so that it is used when running Artisan tasks. | - */ + */ 'url' => env('APP_URL', 'http://localhost'), @@ -68,7 +68,7 @@ | will be used by the PHP date and date-time functions. We have gone | ahead and set this to a sensible default for you out of the box. | - */ + */ 'timezone' => 'UTC', @@ -81,7 +81,7 @@ | by the translation service provider. You are free to set this value | to any of the locales which will be supported by the application. | - */ + */ 'locale' => 'en', @@ -94,7 +94,7 @@ | is not available. You may change the value to correspond to any of | the language folders that are provided through your application. | - */ + */ 'fallback_locale' => 'en', @@ -107,9 +107,9 @@ | data for your database seeds. For example, this will be used to get | localized telephone numbers, street address information and more. | - */ + */ - 'faker_locale' => 'en_US', + 'faker_locale' => env('FAKER_LOCALE', 'en_US'), /* |-------------------------------------------------------------------------- @@ -120,7 +120,7 @@ | to a random, 32 character string, otherwise these encrypted strings | will not be safe. Please do this before deploying an application! | - */ + */ 'key' => env('APP_KEY'), @@ -137,7 +137,7 @@ | | Supported drivers: "file", "cache" | - */ + */ 'maintenance' => [ 'driver' => 'file', @@ -153,7 +153,7 @@ | request to your application. Feel free to add your own services to | this array to grant expanded functionality to your applications. | - */ + */ 'providers' => ServiceProvider::defaultProviders()->merge([ /* @@ -179,7 +179,7 @@ | is started. However, feel free to register as many as you wish as | the aliases are "lazy" loaded so they don't hinder performance. | - */ + */ 'aliases' => Facade::defaultAliases()->merge([ // 'Example' => App\Facades\Example::class, diff --git a/database/factories/PostFactory.php b/database/factories/PostFactory.php new file mode 100644 index 0000000..d72ced2 --- /dev/null +++ b/database/factories/PostFactory.php @@ -0,0 +1,28 @@ + + */ +class PostFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'title' => fake()->sentence(mt_rand(2, 8)), + 'slug' => fake()->slug(), + 'excerpt' => fake()->sentence(mt_rand(10, 25)), + 'body' => fake()->paragraph(mt_rand(5, 10)), + 'user_id' => mt_rand(1, 10), + 'category_id' => mt_rand(1, 3), + ]; + } +} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index a6ecc0a..4079cb2 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -19,6 +19,7 @@ public function definition(): array { return [ 'name' => fake()->name(), + 'username' => fake()->unique()->userName(), 'email' => fake()->unique()->safeEmail(), 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password @@ -31,7 +32,7 @@ public function definition(): array */ public function unverified(): static { - return $this->state(fn (array $attributes) => [ + return $this->state(fn(array $attributes) => [ 'email_verified_at' => null, ]); } diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 444fafb..02b919f 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -14,6 +14,7 @@ public function up(): void Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); + $table->string('username')->unique(); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a529495..00acb79 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -16,30 +16,30 @@ class DatabaseSeeder extends Seeder */ public function run(): void { - // \App\Models\User::factory(10)->create(); - - // \App\Models\User::factory()->create([ + // User::factory()->create([ // 'name' => 'Test User', // 'email' => 'test@example.com', // ]);\ - User::create([ - 'name' => 'John Doe', - 'email' => 'john@example.com', - 'password' => bcrypt('password'), - ]); + // User::create([ + // 'name' => 'John Doe', + // 'email' => 'john@example.com', + // 'password' => bcrypt('password'), + // ]); - User::create([ - 'name' => 'Jack Doe', - 'email' => 'jack@example.com', - 'password' => bcrypt('password'), - ]); + // User::create([ + // 'name' => 'Jack Doe', + // 'email' => 'jack@example.com', + // 'password' => bcrypt('password'), + // ]); - User::create([ - 'name' => 'Jane Doe', - 'email' => 'jane@example.com', - 'password' => bcrypt('password'), - ]); + // User::create([ + // 'name' => 'Jane Doe', + // 'email' => 'jane@example.com', + // 'password' => bcrypt('password'), + // ]); + + User::factory(10)->create(); Category::create([ 'name' => 'Personal', @@ -56,49 +56,51 @@ public function run(): void 'slug' => 'design', ]); - Post::create([ - 'title' => 'First Post', - 'slug' => 'first-post', - 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', - 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.', - 'category_id' => 1, - 'user_id' => 3, - ]); - - Post::create([ - 'title' => 'Second Post', - 'slug' => 'second-post', - 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', - 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.', - 'category_id' => 2, - 'user_id' => 2, - ]); - - Post::create([ - 'title' => 'Third Post', - 'slug' => 'third-post', - 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', - 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.', - 'category_id' => 3, - 'user_id' => 1, - ]); - - Post::create([ - 'title' => 'Fourth Post', - 'slug' => 'fourth-post', - 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', - 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.', - 'category_id' => 3, - 'user_id' => 3, - ]); - - Post::create([ - 'title' => 'Fifth Post', - 'slug' => 'fifth-post', - 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', - 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.', - 'category_id' => 1, - 'user_id' => 1, - ]); + Post::factory(20)->create(); + + // Post::create([ + // 'title' => 'First Post', + // 'slug' => 'first-post', + // 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', + // 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.', + // 'category_id' => 1, + // 'user_id' => 3, + // ]); + + // Post::create([ + // 'title' => 'Second Post', + // 'slug' => 'second-post', + // 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', + // 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.', + // 'category_id' => 2, + // 'user_id' => 2, + // ]); + + // Post::create([ + // 'title' => 'Third Post', + // 'slug' => 'third-post', + // 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', + // 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.', + // 'category_id' => 3, + // 'user_id' => 1, + // ]); + + // Post::create([ + // 'title' => 'Fourth Post', + // 'slug' => 'fourth-post', + // 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', + // 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.', + // 'category_id' => 3, + // 'user_id' => 3, + // ]); + + // Post::create([ + // 'title' => 'Fifth Post', + // 'slug' => 'fifth-post', + // 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', + // 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.', + // 'category_id' => 1, + // 'user_id' => 1, + // ]); } } diff --git a/resources/views/post.blade.php b/resources/views/post.blade.php index 0ef607c..dee7108 100644 --- a/resources/views/post.blade.php +++ b/resources/views/post.blade.php @@ -3,7 +3,7 @@ @section('container')

{{ $post->title }}

-

By {{ $post->user->name }} in By {{ $post->author->name }} in {{ $post->category->name }}

{!! $post->body !!} diff --git a/resources/views/posts.blade.php b/resources/views/posts.blade.php index b9ab87b..105d60a 100644 --- a/resources/views/posts.blade.php +++ b/resources/views/posts.blade.php @@ -6,9 +6,9 @@ @foreach ($posts as $post)

{{ $post->title }}

-

By. {{ $post->user->name }} in {{ $post->category->name }} +

By. {{ $post->author->name }} + in + {{ $post->category->name }}

{{ $post->excerpt }}

Read More... diff --git a/routes/web.php b/routes/web.php index 976043f..6ce7528 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,7 @@ use App\Http\Controllers\PostController; use App\Models\Category; +use App\Models\User; use Illuminate\Support\Facades\Route; /* @@ -48,3 +49,10 @@ 'categories' => Category::all(), ]); }); + +Route::get('/authors/{author:username}', function (User $author) { + return view('Posts', [ + 'title' => "User's Posts", + 'posts' => $author->posts, + ]); +});