diff --git a/app/controllers/PostController.php b/app/controllers/PostController.php
index feddd35..729e7a7 100644
--- a/app/controllers/PostController.php
+++ b/app/controllers/PostController.php
@@ -4,21 +4,103 @@ namespace app\controllers;
use app\helpers\Debug;
+use app\models\forms\CreatePostForm;
use app\models\Post;
+use app\models\User;
+use app\services\PostService;
+use app\services\UserService;
+use Exception;
+use JetBrains\PhpStorm\NoReturn;
+use kernel\Controller;
-class PostController
+class PostController extends Controller
{
- public function actionCreatePost($post, $user_id)
+ protected function init(): void
{
- return Post::create(['post'=>$post, 'user_id'=>$user_id]);
+ $this->cgView->viewPath = ROOT_DIR . "/views/admin/";
+ $this->cgView->layout = "layouts/main.php";
}
+ public function actionCreate(): void
+ {
+ $this->cgView->render("post/form.php");
+ }
+
+ #[NoReturn] public function actionAdd(): void
+ {
+ $postForm = new CreatePostForm();
+ $postService = new PostService();
+ $postForm->load($_REQUEST);
+ if((new UserService)->check($_REQUEST['username'])) {
+ if ($postForm->validate()) {
+ $post = $postService->create($postForm);
+ if ($post) {
+ $this->redirect("/admin/post/" . $post->id);
+ }
+ }
+ }
+ $this->redirect("/admin/post/create");
+ }
+
+ /**
+ * @throws Exception
+ */
public function actionIndex(): void
{
- Debug::dd("Post list");
- foreach (Post::all() as $post)
- {
- echo $post->post . "
";
+ $posts = Post::all();
+
+ $this->cgView->render("post/index.php", ['posts' => $posts]);
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function actionView($id): void
+ {
+ $post = Post::find($id);
+
+ if (!$post){
+ throw new Exception(message: "The post not found");
}
+ $this->cgView->render("post/view.php", ['post' => $post]);
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function actionUpdate($id): void
+ {
+ $model = Post::find($id);
+ if (!$model){
+ throw new Exception(message: "The post not found");
+ }
+
+ $this->cgView->render("post/form.php", ['model' => $model]);
+ }
+
+ public function actionEdit($id): void
+ {
+ $post = Post::find($id);
+ if (!$post){
+ throw new Exception(message: "The user not found");
+ }
+ $postForm = new CreatePostForm();
+ $postService = new PostService();
+ $postForm->load($_REQUEST);
+ if((new UserService)->check($_REQUEST['username'])) {
+ if ($postForm->validate()) {
+ $post = $postService->update($postForm, $post);
+ if ($post) {
+ $this->redirect("/admin/post/" . $post->id);
+ }
+ }
+ }
+ $this->redirect("/admin/post/update/" . $id);
+ }
+
+ #[NoReturn] public function actionDelete($id): void
+ {
+ Post::find($id)->delete();
+ $this->redirect("/admin/post/");
}
}
\ No newline at end of file
diff --git a/app/controllers/UserController.php b/app/controllers/UserController.php
index f2d2c8d..c8a7114 100644
--- a/app/controllers/UserController.php
+++ b/app/controllers/UserController.php
@@ -50,8 +50,6 @@ class UserController extends Controller{
$this->redirect("/admin/user/create");
}
-
-
public function actionQuestionCount($user_id)
{
return Question::where('user_id', $user_id)->count();
@@ -62,7 +60,8 @@ class UserController extends Controller{
*/
public function actionIndex(): void
{
- $users = User::where(['role' => 1])->get();
+// $users = User::where(['role' => 1])->get();
+ $users = User::all();
$this->cgView->render("user/index.php", ['users' => $users]);
}
@@ -77,20 +76,6 @@ class UserController extends Controller{
if (!$user){
throw new Exception(message: "The user not found");
}
-// $this->twig->addFunction(new TwigFunction('table', function () use ($user){
-// $dataProvider = new ViewJsonTableEloquentModel($user, [
-// 'params' => ["class" => "table table-bordered", "border" => "2"],
-// 'baseUrl' => "/admin/user",
-// ]);
-// $table = new ViewJsonTable($dataProvider->getJson());
-// $table->beforeTable(function (){
-// return PrimaryBtn::create("Список", "/admin/user")->fetch();
-// });
-// $table->create();
-// $table->render();
-// }));
-//
-// echo $this->twig->render('user_table.html.twig');
$this->cgView->render("user/view.php", ['user' => $user]);
}
@@ -134,7 +119,6 @@ class UserController extends Controller{
{
User::find($id)->delete();
$this->redirect("/admin/user/");
-
}
}
\ No newline at end of file
diff --git a/app/models/Post.php b/app/models/Post.php
index c223faa..b8aaa3a 100644
--- a/app/models/Post.php
+++ b/app/models/Post.php
@@ -2,8 +2,26 @@
namespace app\models;
use \Illuminate\Database\Eloquent\Model;
+
+/**
+ * @property int $id
+ * @property string $post
+ * @property string $username
+ * @method static where(int[] $array)
+ * @method static find($id)
+ */
class Post extends Model
{
protected $table = 'post';
- protected $fillable = ['post', 'user_id'];
+ protected $fillable = ['post', 'username'];
+
+ public static function labels(): array
+ {
+ return [
+ 'post' => 'Пост',
+ 'username' => 'Пользователь',
+ 'created_at' => 'Создан',
+ 'updated_at' => 'Обновлен'
+ ];
+ }
}
\ No newline at end of file
diff --git a/app/models/forms/CreatePostForm.php b/app/models/forms/CreatePostForm.php
new file mode 100644
index 0000000..e07d4fe
--- /dev/null
+++ b/app/models/forms/CreatePostForm.php
@@ -0,0 +1,16 @@
+ 'required|min-str-len:1|max-str-len:2048',
+ 'username' => 'required|min-str-len:1|max-str-len:50',
+ ];
+ }
+}
\ No newline at end of file
diff --git a/app/services/PostService.php b/app/services/PostService.php
new file mode 100644
index 0000000..92f4a92
--- /dev/null
+++ b/app/services/PostService.php
@@ -0,0 +1,32 @@
+post = $form_model->getItem('post');
+ $model->username = $form_model->getItem('username');
+ if ($model->save()){
+ return $model;
+ }
+
+ return false;
+ }
+
+ public function update(FormModel $form_model, Post $post): false|Post
+ {
+ $post->post = $form_model->getItem('post');
+ $post->username = $form_model->getItem('username');
+ if ($post->save()){
+ return $post;
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/app/services/UserService.php b/app/services/UserService.php
index 1cae793..ce9a901 100644
--- a/app/services/UserService.php
+++ b/app/services/UserService.php
@@ -2,6 +2,7 @@
namespace app\services;
+use app\helpers\Debug;
use app\models\User;
use kernel\FormModel;
@@ -33,4 +34,13 @@ class UserService
return false;
}
+ public function check(string $username): bool
+ {
+ if (User::where(['username' => $username])->first())
+ {
+ return true;
+ }
+ return false;
+ }
+
}
\ No newline at end of file
diff --git a/app/tables/columns/UserDeleteActionColumn.php b/app/tables/columns/UserDeleteActionColumn.php
new file mode 100644
index 0000000..cf17acb
--- /dev/null
+++ b/app/tables/columns/UserDeleteActionColumn.php
@@ -0,0 +1,17 @@
+baseUrl . $this->prefix . $this->id . $this->prefix . "update";
+ $link = $this->baseUrl . $this->prefix . "delete" . $this->prefix . $this->id;
+ return " Удалить ";
+ }
+}
\ No newline at end of file
diff --git a/app/tables/columns/UserEditActionColumn.php b/app/tables/columns/UserEditActionColumn.php
index b2ff3b3..f0db24d 100644
--- a/app/tables/columns/UserEditActionColumn.php
+++ b/app/tables/columns/UserEditActionColumn.php
@@ -12,6 +12,6 @@ class UserEditActionColumn extends ActionColumn
{
// $link = $this->baseUrl . $this->prefix . $this->id . $this->prefix . "update";
$link = $this->baseUrl . $this->prefix . "update" . $this->prefix . $this->id;
- return " Редактировать ";
+ return " Редактировать ";
}
}
\ No newline at end of file
diff --git a/index.php b/index.php
index 2fe36dd..52a81e0 100644
--- a/index.php
+++ b/index.php
@@ -23,30 +23,21 @@ $router->group(["prefix" => "admin"], function (RouteCollector $router){
$router->get('/create', [\app\controllers\UserController::class, 'actionCreate']);
$router->post("/", [\app\controllers\UserController::class, 'actionAdd']);
$router->get('/{id}', [\app\controllers\UserController::class, 'actionView']);
-// $router->get('/{id}/update', [\app\controllers\UserController::class, 'actionUpdate']);
$router->any('/update/{id}', [\app\controllers\UserController::class, 'actionUpdate']);
$router->any("/edit/{id}", [\app\controllers\UserController::class, 'actionEdit']);
$router->get('/delete/{id}', [\app\controllers\UserController::class, 'actionDelete']);
});
- $router->group(["prefix" => "question"], function (RouteCollector $router){
- $router->get('/create', [QuestionController::class, 'actionCreate']);
- $router->get('/update', [QuestionController::class, 'actionUpdate']);
- $router->get('/delete/{id}', [QuestionController::class, 'actionDelete']);
- $router->get('/', [QuestionController::class, 'actionIndex']);
- $router->get('/{id}', [QuestionController::class, 'actionView']);
- $router->post("/", [QuestionController::class, 'actionAdd']);
- $router->post("/edit", [QuestionController::class, 'actionEdit']);
- });
$router->group(["prefix" => "post"], function (RouteCollector $router){
$router->get('/', [\app\controllers\PostController::class, 'actionIndex']);
+ $router->get('/create', [\app\controllers\PostController::class, 'actionCreate']);
+ $router->post("/", [\app\controllers\PostController::class, 'actionAdd']);
+ $router->get('/{id}', [\app\controllers\PostController::class, 'actionView']);
+ $router->any('/update/{id}', [\app\controllers\PostController::class, 'actionUpdate']);
+ $router->any("/edit/{id}", [\app\controllers\PostController::class, 'actionEdit']);
+ $router->get('/delete/{id}', [\app\controllers\PostController::class, 'actionDelete']);
});
});
-$router->get('/allQuestions', [QuestionController::class, 'actionViewAllQuestions']);
-
-$router->get('/allAnswers', [AnswerController::class, 'actionViewAllAnswers']);
-
-
$dispatcher = new Phroute\Phroute\Dispatcher($router->getData());
$response = $dispatcher->dispatch($_SERVER['REQUEST_METHOD'], parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
diff --git a/m.php b/m.php
index e3bca0e..d687cdb 100644
--- a/m.php
+++ b/m.php
@@ -9,6 +9,6 @@ require_once __DIR__ . "/vendor/autoload.php";
require_once __DIR__ . "/bootstrap.php";
//UserMigration::up();
-//PostMigration::up();
+PostMigration::up();
//AnswerMigration::up();
//QuestionMigration::up();
\ No newline at end of file
diff --git a/migrations/PostMigration.php b/migrations/PostMigration.php
index f5e6327..3924ab8 100644
--- a/migrations/PostMigration.php
+++ b/migrations/PostMigration.php
@@ -18,8 +18,8 @@ class PostMigration extends Migration
{
Manager::schema()->create('post', function (Blueprint $table) {
$table->increments('id');
- $table->string('post', 255)->nullable(false);
- $table->integer('user_id');
+ $table->string('post', 3000)->nullable(false);
+ $table->string('username', 255)->nullable(false);
$table->timestamps();
});
}
diff --git a/views/admin/post/form.php b/views/admin/post/form.php
new file mode 100644
index 0000000..8226ef3
--- /dev/null
+++ b/views/admin/post/form.php
@@ -0,0 +1,51 @@
+beginForm(isset($model) ? "/admin/post/edit/" . $model->id : "/admin/post");
+
+$form->field(class: \itguild\forms\inputs\TextArea::class, name: "post", params: [
+ 'class' => "form-control",
+ 'placeholder' => 'Пост',
+ 'rows' => '10',
+ 'value' => $model->post ?? ''
+])
+ ->setLabel("Пост")
+ ->render();
+
+$form->field(class: \itguild\forms\inputs\TextInput::class, name: "username", params: [
+ 'class' => "form-control",
+ 'placeholder' => 'Логин',
+ 'value' => $model->username ?? ''
+])
+ ->setLabel("Имя пользователя")
+ ->render();
+?>
+