您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
列出已有项目分类(laravel11+breeze+inertia实现增与查)
发布时间:2024-11-01 17:01:10编辑:雪饮阅读()
-
实现项目分类创建
要列出项目分类就必须先要有分类。
所以我们应该是要有个项目分类的表。
CREATE TABLE `project_category` (
`id` int NOT NULL AUTO_INCREMENT,
`name` char(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
然后创建模型
./vendor/bin/sail artisan make:model project_category
然后关联表名
class project_category extends Model
{
protected $table = 'project_category';
public $timestamps = false;
}
在web.php中的Route::middleware('auth')->group(function () {组中添加project category的创建页面路由。
Route::get('/project_category', [ProjectCategoryController::class, 'edit'])->name('project_category.edit');
并创建project category控制器
ProjectCategoryController.php:
<?php
namespace App\Http\Controllers;
use App\Http\Requests\ProfileUpdateRequest;
use App\Http\Requests\ProjectUpdateRequest;
use App\Models\Project;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Storage;
use Inertia\Inertia;
use Inertia\Response;
class ProjectCategoryController extends Controller
{
public function log($log){
$timeStr=date("Y-m-d H:i:s",time());
file_put_contents("220807.txt",$timeStr.":".$log."\r\n",FILE_USE_INCLUDE_PATH);
}
/**
* Display the user's profile form.
*/
public function edit(Request $request): Response
{
return Inertia::render('ProjectCategory/Edit', [
'status' => session('status'),
]);
}
}
暂只实现edit方法。
然后实现project category的form组件
Y:\root\example-app\resources\js\Pages\ProjectCategory\Partials\UpdateProjectCategoryInformationForm.vue
<script setup>
import InputError from '@/Components/InputError.vue';
import InputLabel from '@/Components/InputLabel.vue';
import PrimaryButton from '@/Components/PrimaryButton.vue';
import TextInput from '@/Components/TextInput.vue';
import { useForm, usePage } from '@inertiajs/vue3';
const user = usePage().props.auth.user;
const form = useForm({
name: user.name,
});
</script>
<template>
<section>
<header>
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
Project Category Information
</h2>
<p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
Update your account's Project Category information.
</p>
</header>
<form @submit.prevent="form.patch(route('project_category.update'))" class="mt-6 space-y-6" >
<div>
<InputLabel for="name" value="Name" />
<TextInput
id="name"
type="text"
class="mt-1 block w-full"
v-model="form.name"
required
autofocus
autocomplete="name"
/>
<InputError class="mt-2" :message="form.errors.name" />
</div>
<div class="flex items-center gap-4">
<PrimaryButton :disabled="form.processing">Save</PrimaryButton>
<Transition
enter-active-class="transition ease-in-out"
enter-from-class="opacity-0"
leave-active-class="transition ease-in-out"
leave-to-class="opacity-0"
>
<p
v-if="form.recentlySuccessful"
class="text-sm text-gray-600 dark:text-gray-400"
>
Saved.
</p>
</Transition>
</div>
</form>
</section>
</template>
接着实现project category的界面
Y:\root\example-app\resources\js\Pages\ProjectCategory\Edit.vue
<script setup>
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout.vue';
import UpdateProjectCategoryInformationForm from './Partials/UpdateProjectCategoryInformationForm.vue';
import { Head } from '@inertiajs/vue3';
</script>
<template>
<Head title="Project-Create" />
<AuthenticatedLayout>
<template #header>
<h2
class="text-xl font-semibold leading-tight text-gray-800 dark:text-gray-200"
>
Project category-Create
</h2>
</template>
<div class="py-12">
<div class="mx-auto max-w-7xl space-y-6 sm:px-6 lg:px-8">
<UpdateProjectCategoryInformationForm class="max-w-xl" />
</div>
</div>
</AuthenticatedLayout>
</template>
分类创建请求
分类创建界面完成后,接下来就开始写分类创建请求,首先也是要有个请求验证类。
Y:\root\example-app\app\Http\Requests\ProjectCategoryUpdateRequest.php:
<?php
namespace App\Http\Requests;
use App\Models\User;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class ProjectCategoryUpdateRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
*/
public function rules(): array
{
return [
'name' => ['required', 'string', 'max:255']
];
}
}
然后在刚才的ProjectCategoryController.php中继续实现update方法如:
public function update(ProjectCategoryUpdateRequest $request):RedirectResponse
{
$this->log(var_export($request->user(),true));
$this->log("uid:".$request->user()->id);
$name=$request->input("name");
$project_category=new project_category();
$project_category->name=$name;
$project_category->save();
return Redirect::route('project_category.index');
}
列出已有项目分类
可以看到我在上面update方法中已经在最后处理创建请求结束后跳转到了项目分类首页。
那么接下来首先我们在web.php中的Route::middleware('auth')->group(function () {
中再添加上项目分类列表的路由:
Route::get('/project_category/index', [ProjectCategoryController::class, 'index'])->name('project_category.index');
可以看到这里是又调用项目分类控制器的index方法,所以也需要实现于项目分类控制器中。
public function index(Request $request):Response
{
return Inertia::render('ProjectCategory/Index', [
'categories' => project_category::get(),
]);
}
然后实现单个category组件
Y:\root\example-app\resources\js\Pages\ProjectCategory\Partials\Category.vue
<script setup>
defineProps(['category']);
</script>
<template>
<div class="p-6 flex space-x-2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-gray-600 -scale-x-100" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" />
</svg>
<div class="flex-1">
<div class="flex justify-between items-center">
<div>
<span class="text-gray-800">{{ category.name }}</span>
</div>
</div>
</div>
</div>
</template>
然后实现列出已有项目分类
Y:\root\example-app\resources\js\Pages\ProjectCategory\Index.vue
<script setup>
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout.vue';
import Category from './Partials/Category.vue';
import { Head } from '@inertiajs/vue3';
defineProps(['categories']);
</script>
<template>
<Head title="Categories" />
<AuthenticatedLayout>
<div class="mt-6 bg-white shadow-sm rounded-lg divide-y">
<Category
v-for="category in categories"
:key="category.id"
:category="category"
/>
</div>
</AuthenticatedLayout>
</template>
补充:
刚才在项目分类控制器中实现了update方法后,还需要在web.php中的Route::middleware('auth')->group(function () {
添加该路由条目
Route::patch('/project_category', [ProjectCategoryController::class, 'update'])->name('project_category.update');
至此列出已有项目分类就完成了。
关键字词:laravel,inertia
相关文章
- 图片上传保存逻辑(laravel11+breeze+inertia+vue3实现
- 更改数据结构的两种方法(laravel的migrate)
- mass-assignment批量赋值异常及期间的注意事项(基于la
- blade视图模板的扩展与复用(laravel的inertia)
- 调试请求数据并创建project(为基于sail的laravel项目
- project-create相关的路由及controller定义(laravel-b
- 前端form组件的介绍(laravel11中的breeze的form实现)
- vite刷新慢的解决办法(laravel的sail部署中mysql容器
- 创建project相关的视图与数据库设计(laravel入门套件B
- MVC介绍及创建数据模型(laravel在命令行中创建模型)