php laravel入门项目 CURD练习 API接口

NXCRM系统在CentOS7系统中部署 NXCRM 是一套基于 Laravel 的 CRM 应用程序。它包含了一个管理中心,可以管理用户、客户、产品、订单、商机,合同,收款,附件,联系人,跟进动态,发票,业绩目标,团队管理,消息通知等等。NXCRM设计简约但功能并不简单。在囊括了上百项几乎满足绝大多数企业的管理功能的同时,我们始终让设计保持简约,而不是让它变得复杂。也因此理念,NXCRM在诸多CRM应用程序中保持着自己独具一格的设计特色,令人耳目一新。 阅读详情

前言

其实没想好写什么项目,先把laravel学习过程写出来把。这章主要写一些laravel的入口项目。所有的练习小项目全部放在这章。这章应该算是长期更新的。目前1.To-Do List应用 2.书签管理 3.API接口 电影管理

什么是laravel

Laravel 是一个 PHP 框架,简化了 Web 开发的复杂工作。它基于 MVC(模型-视图-控制器)架构,提供了很多开箱即用的功能,比如数据库操作(Eloquent ORM)、路由、模板引擎(Blade)等。适合开发博客、电商网站、API 等项目。

准备开发环境

  • PHP:Laravel 11 要求 PHP 8.2 或更高版本。
  • Composer:PHP 的包管理工具,用于安装 Laravel。
  • Web 服务器:推荐用 Laravel 内置的 Artisan 开发服务器,或者用 Nginx/Apache。
  • 数据库:可以选择 MySQL、PostgreSQL 或 SQLite(初学者用 SQLite 最简单)。
  • 代码编辑器:推荐 VS Code、PHPStorm 或 Sublime Text。

这里我说一下我的版本是8.0,懒的换了。版本低点就低点好了

php

php下载地址 另外环境变量自己加一下。加完之后运行cmd然后再命令行输入php -v。出现以下信息就算安装成功

PHP 8.0.2 (cli) (built: Feb  3 2021 18:36:37) ( NTS Visual C++ 2019 x64 )
Copyright (c) The PHP Group
Zend Engine v4.0.2, Copyright (c) Zend Technologies
composer

composer下载。下载完成之后也是cmd,输入composer --version,出现下面信息就算安装成功

Composer version 2.8.9 2025-05-13 14:01:37
PHP version 8.0.2 (D:\phpstudy_pro\Extensions\php\php8.0.2nts\php.exe)
Run the "diagnose" command to get more detailed diagnostics output.

mysql,编辑工具之类的我想你们应该都有了,我就不来写了,在不懂私信或者评论。

安装laravel

打开终端,运行以下命令来安装 Laravel 的全局安装器:

composer global require laravel/installer

创建新项目:

laravel new my-first-laravel

进入项目目录

cd my-first-laravel

启动开发服务器

php artisan serve

然后在浏览器访问 http://localhost:8000,你会看到 Laravel 的欢迎页面!
另外提一句我用的加速器,所以镜像和下载速度慢的问题我是没有考虑的。大家要是感觉太慢的话,切下国内镜像或者用下这个加速器 加速器地址。如果能看到欢迎页面那就OK,否则再查看下教程把。

在这里插入图片描述到这里laravel已经安装完了。我先去看文档写一个项目出来,大家加油

To-Do List

env配置数据库

我用的mysql数据库,大家自行安装,数据库我名字跟项目一个样,反正学习练手。配置大家改成自己的,编辑.env文件

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_first_laravel
DB_USERNAME=root
DB_PASSWORD=root

数据库配置和生成

运行 Artisan 命令生成迁移文件:

php artisan make:migration create_tasks_table

编辑该文件database/migrations/2025_06_04_091610_create_tasks_table.php

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up(): void
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->id(); // 自增主键
            $table->string('title'); // 任务标题
            $table->text('description')->nullable(); // 任务描述,可为空
            $table->timestamps(); // 创建和更新时间
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down(): void
    {
        Schema::dropIfExists('tasks');
    }
};

运行该文件命令

php artisan migrate

自己去mysql里查一下表有没有生成,有的话继续,没有回头找问题把。

生成模型和控制器

执行命令

php artisan make:model Task -c

-c表示同时生成控制器
这会在 app/Models/Task.php 创建模型文件,在 app/Http/Controllers/TaskController.php 创建控制器。
最后打开模型,app/Model/Task.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    protected $fillable = ['title', 'description'];
}

路由

打开路由文件routes/web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TaskController;
/*
|--------------------------------------------------------------------------
| 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('/', function () {
//     return view('welcome');
// });


// taks
Route::get('/', [TaskController::class, 'index'])->name('tasks.index');
Route::get('/tasks/create', [TaskController::class, 'create'])->name('tasks.create');
Route::post('/tasks', [TaskController::class, 'store'])->name('tasks.store');
Route::get('/tasks/{task}/edit', [TaskController::class, 'edit'])->name('tasks.edit');
Route::put('/tasks/{task}', [TaskController::class, 'update'])->name('tasks.update');
Route::delete('/tasks/{task}', [TaskController::class, 'destroy'])->name('tasks.destroy');
  • index:显示任务列表。
  • create:显示添加任务的表单。
  • store:处理表单提交,保存新任务。
  • edit:显示编辑任务的表单。
  • update:更新任务。
  • destroy:删除任务。

控制器

编写app/Http/Controllers/TaskController.php

<?php

namespace App\Http\Controllers;

use App\Models\Task;
use Illuminate\Http\Request;

class TaskController extends Controller
{
    // 显示任务列表
    public function index()
    {
        $tasks = Task::all();
        return view('tasks.index', compact('tasks'));
    }

    // 显示添加任务表单
    public function create()
    {
        return view('tasks.create');
    }

    // 保存新任务
    public function store(Request $request)
    {
        $request->validate([
            'title' => 'required|string|max:255',
            'description' => 'nullable|string',
        ]);

        Task::create($request->all());

        return redirect()->route('tasks.index')->with('success', '任务添加成功!');
    }

    // 显示编辑任务表单
    public function edit(Task $task)
    {
        return view('tasks.edit', compact('task'));
    }

    // 更新任务
    public function update(Request $request, Task $task)
    {
        $request->validate([
            'title' => 'required|string|max:255',
            'description' => 'nullable|string',
        ]);

        $task->update($request->all());

        return redirect()->route('tasks.index')->with('success', '任务更新成功!');
    }

    // 删除任务
    public function destroy(Task $task)
    {
        $task->delete();
        return redirect()->route('tasks.index')->with('success', '任务删除成功!');
    }
}

视图

注意路径哦。
创建resources/views/layouts/app.blade.php

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>To-Do List</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .container { max-width: 800px; margin: auto; }
        .success { color: green; }
        table { width: 100%; border-collapse: collapse; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <div class="container">
        @if (session('success'))
            <div class="success">{{ session('success') }}</div>
        @endif
        @yield('content')
    </div>
</body>
</html>

创建resources/views/tasks/index.blade.php

@extends('layouts.app')

@section('content')
    <h1>任务列表</h1>
    <a href="{{ route('tasks.create') }}">添加新任务</a>
    @if ($tasks->isEmpty())
        <p>暂无任务</p>
    @else
        <table>
            <tr>
                <th>标题</th>
                <th>描述</th>
                <th>操作</th>
            </tr>
            @foreach ($tasks as $task)
                <tr>
                    <td>{{ $task->title }}</td>
                    <td>{{ $task->description ?? '无描述' }}</td>
                    <td>
                        <a href="{{ route('tasks.edit', $task) }}">编辑</a>
                        <form action="{{ route('tasks.destroy', $task) }}" method="POST" style="display:inline;">
                            @csrf
                            @method('DELETE')
                            <button type="submit" onclick="return confirm('确定删除吗?')">删除</button>
                        </form>
                    </td>
                </tr>
            @endforeach
        </table>
    @endif
@endsection

创建resources/views/tasks/create.blade.php

@extends('layouts.app')

@section('content')
    <h1>添加任务</h1>
    <form action="{{ route('tasks.store') }}" method="POST">
        @csrf
        <div>
            <label>标题:</label>
            <input type="text" name="title" required>
        </div>
        <div>
            <label>描述:</label>
            <textarea name="description"></textarea>
        </div>
        <button type="submit">保存</button>
    </form>
    <a href="{{ route('tasks.index') }}">返回</a>
@endsection

创建resources/views/tasks/edit.blade.php

@extends('layouts.app')

@section('content')
    <h1>编辑任务</h1>
    <form action="{{ route('tasks.update', $task) }}" method="POST">
        @csrf
        @method('PUT')
        <div>
            <label>标题:</label>
            <input type="text" name="title" value="{{ $task->title }}" required>
        </div>
        <div>
            <label>描述:</label>
            <textarea name="description">{{ $task->description }}</textarea>
        </div>
        <button type="submit">更新</button>
    </form>
    <a href="{{ route('tasks.index') }}">返回</a>
@endsection

写完了,http://localhost:8000 能输出下面页面就算成功,大家自己测试把。
在这里插入图片描述

书签管理

继续练习下CURD操作,还是这个项目里写哈,数据库之类的都已经配过了,就不来写了。

生成模型和迁移文件

运行命令

php artisan make:migration create_bookmarks_table

文件里加上

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('bookmarks', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('url');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('bookmarks');
    }
};

运行迁移

php artisan migrate 

生成模型命令

php artisan make:model Bookmark

文件添加

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Bookmark extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'url'];
}

控制器

运行生成命令

php artisan make:controller BookmarkController --resource

编写代码app/Http/Controllers/BookmarkController.php

<?php

namespace App\Http\Controllers;

use App\Models\Bookmark;
use Illuminate\Http\Request;

class BookmarkController extends Controller
{
    // 显示书签列表
    public function index()
    {
        $bookmarks = Bookmark::all();
        return view('bookmarks.index', compact('bookmarks'));
    }

    // 显示添加书签表单
    public function create()
    {
        return view('bookmarks.create');
    }

    // 保存新书签
    public function store(Request $request)
    {
        $request->validate([
            'title' => 'required|string|max:255',
            'url' => 'required|url',
        ]);

        Bookmark::create($request->all());
        return redirect()->route('bookmarks.index')->with('success', '书签添加成功!');
    }

    // 显示编辑书签表单
    public function edit(Bookmark $bookmark)
    {
        return view('bookmarks.edit', compact('bookmark'));
    }

    // 更新书签
    public function update(Request $request, Bookmark $bookmark)
    {
        $request->validate([
            'title' => 'required|string|max:255',
            'url' => 'required|url',
        ]);

        $bookmark->update($request->all());
        return redirect()->route('bookmarks.index')->with('success', '书签更新成功!');
    }

    // 删除书签
    public function destroy(Bookmark $bookmark)
    {
        $bookmark->delete();
        return redirect()->route('bookmarks.index')->with('success', '书签删除成功!');
    }
}

路由

修改路由文件routes/web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TaskController;
use App\Http\Controllers\BookmarkController;
/*
|--------------------------------------------------------------------------
| 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('/', function () {
//     return view('welcome');
// });

// taks
Route::get('/', [TaskController::class, 'index'])->name('tasks.index');
Route::get('/tasks/create', [TaskController::class, 'create'])->name('tasks.create');
Route::post('/tasks', [TaskController::class, 'store'])->name('tasks.store');
Route::get('/tasks/{task}/edit', [TaskController::class, 'edit'])->name('tasks.edit');
Route::put('/tasks/{task}', [TaskController::class, 'update'])->name('tasks.update');
Route::delete('/tasks/{task}', [TaskController::class, 'destroy'])->name('tasks.destroy');

// bookmark
Route::get('bookmarks', [BookmarkController::class, 'index'])->name('bookmarks.index');
Route::get('bookmarks/create', [BookmarkController::class, 'create'])->name('bookmarks.create');
Route::post('bookmarks', [BookmarkController::class, 'store'])->name('bookmarks.store');
Route::get('bookmarks/{bookmark}/edit', [BookmarkController::class, 'edit'])->name('bookmarks.edit');
Route::put('bookmarks/{bookmark}', [BookmarkController::class, 'update'])->name('bookmarks.update');
Route::delete('bookmarks/{bookmark}', [BookmarkController::class, 'destroy'])->name('bookmarks.destroy');

页面

这里加了bootstrap美化页面
创建resources/views/layouts/appbook.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>书签管理</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <nav class="navbar navbar-expand-lg navbar-light bg-light mb-4">
        <div class="container">
            <a class="navbar-brand" href="{{ route('bookmarks.index') }}">书签管理</a>
            <div class="navbar-nav">
                <a class="nav-link" href="{{ route('bookmarks.index') }}">书签列表</a>
                <a class="nav-link" href="{{ route('bookmarks.create') }}">添加书签</a>
            </div>
        </div>
    </nav>
    <div class="container">
        @yield('content')
    </div>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

创建文件resources/views/bookmarks/index.blade.php

@extends('layouts.appbook')

@section('content')
    <h1 class="mb-4">书签列表</h1>
    @if (session('success'))
        <div class="alert alert-success">
            {{ session('success') }}
        </div>
    @endif
    <a href="{{ route('bookmarks.create') }}" class="btn btn-primary mb-3">添加新书签</a>
    <table class="table table-striped table-bordered">
        <thead class="table-dark">
            <tr>
                <th>标题</th>
                <th>URL</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            @forelse ($bookmarks as $bookmark)
                <tr>
                    <td>{{ $bookmark->title }}</td>
                    <td><a href="{{ $bookmark->url }}" target="_blank">{{ $bookmark->url }}</a></td>
                    <td>
                        <a href="{{ route('bookmarks.edit', $bookmark->id) }}" class="btn btn-sm btn-warning">编辑</a>
                        <form action="{{ route('bookmarks.destroy', $bookmark->id) }}" method="POST" style="display:inline;">
                            @csrf
                            @method('DELETE')
                            <button type="submit" class="btn btn-sm btn-danger" onclick="return confirm('确定删除?')">删除</button>
                        </form>
                    </td>
                </tr>
            @empty
                <tr>
                    <td colspan="3" class="text-center">暂无书签</td>
                </tr>
            @endforelse
        </tbody>
    </table>
@endsection

创建文件resources/views/bookmarks/create.blade.php

@extends('layouts.appbook')

@section('content')
    <h1 class="mb-4">添加书签</h1>
    <form action="{{ route('bookmarks.store') }}" method="POST">
        @csrf
        <div class="mb-3">
            <label for="title" class="form-label">书签标题</label>
            <input type="text" name="title" id="title" class="form-control" value="{{ old('title') }}">
            @error('title')
                <div class="text-danger">{{ $message }}</div>
            @enderror
        </div>
        <div class="mb-3">
            <label for="url" class="form-label">URL</label>
            <input type="text" name="url" id="url" class="form-control" value="{{ old('url') }}">
            @error('url')
                <div class="text-danger">{{ $message }}</div>
            @enderror
        </div>
        <button type="submit" class="btn btn-success">保存</button>
        <a href="{{ route('bookmarks.index') }}" class="btn btn-secondary">取消</a>
    </form>
@endsection

创建文件resources/views/bookmarks/edit.blade.php

@extends('layouts.appbook')

@section('content')
    <h1 class="mb-4">编辑书签</h1>
    <form action="{{ route('bookmarks.update', $bookmark->id) }}" method="POST">
        @csrf
        @method('PUT')
        <div class="mb-3">
            <label for="title" class="form-label">书签标题</label>
            <input type="text" name="title" id="title" class="form-control" value="{{ old('title', $bookmark->title) }}">
            @error('title')
                <div class="text-danger">{{ $message }}</div>
            @enderror
        </div>
        <div class="mb-3">
            <label for="url" class="form-label">URL</label>
            <input type="text" name="url" id="url" class="form-control" value="{{ old('url', $bookmark->url) }}">
            @error('url')
                <div class="text-danger">{{ $message }}</div>
            @enderror
        </div>
        <button type="submit" class="btn btn-success">更新</button>
        <a href="{{ route('bookmarks.index') }}" class="btn btn-secondary">取消</a>
    </form>
@endsection

OK了,能输出以下内容就算成功,大家自己测试一下

在这里插入图片描述

电影管理 API接口

模型和迁移

php artisan make:model Movie -m

编辑迁移

$table->string('title');
$table->string('director');

编辑模型

protected $fillable = ['title', 'director'];

运行迁移

php artisan migrate

控制器

创建命令

php artisan make:controller Api/MovieController --api

编辑文件

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Movie;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;

class MovieController extends Controller
{
    // 获取所有电影
    public function index(): JsonResponse
    {
        $movies = Movie::all();
        return response()->json([
            'status' => 'success',
            'data' => $movies,
        ], 200);
    }

    // 获取单个电影
    public function show(Movie $movie): JsonResponse
    {
        return response()->json([
            'status' => 'success',
            'data' => $movie,
        ], 200);
    }

    // 添加新电影
    public function store(Request $request): JsonResponse
    {
        $validated = $request->validate([
            'title' => 'required|string|max:255',
            'director' => 'required|string|max:255',
        ], [
            'title.required' => '电影标题不能为空',
            'title.max' => '标题不能超过255个字符',
            'director.required' => '导演名称不能为空',
            'director.max' => '导演名称不能超过255个字符',
        ]);

        $movie = Movie::create($validated);
        return response()->json([
            'status' => 'success',
            'message' => '电影添加成功',
            'data' => $movie,
        ], 201);
    }

    // 更新电影
    public function update(Request $request, Movie $movie): JsonResponse
    {
        $validated = $request->validate([
            'title' => 'required|string|max:255',
            'director' => 'required|string|max:255',
        ], [
            'title.required' => '电影标题不能为空',
            'title.max' => '标题不能超过255个字符',
            'director.required' => '导演名称不能为空',
            'director.max' => '导演名称不能超过255个字符',
        ]);

        $movie->update($validated);
        return response()->json([
            'status' => 'success',
            'message' => '电影更新成功',
            'data' => $movie,
        ], 200);
    }

    // 删除电影
    public function destroy(Movie $movie): JsonResponse
    {
        $movie->delete();
        return response()->json([
            'status' => 'success',
            'message' => '电影删除成功',
        ], 204);
    }
}

每个方法返回 JSON 响应,包含 status、message(可选)和 data(可选)。

HTTP 状态码:

  • 200:成功(index, show, update)。
  • 201:创建成功(store)。
  • 204:删除成功,无内容返回。

路由

编辑routes/api.php

use App\Http\Controllers\Api\MovieController;

Route::apiResource('movies', MovieController::class);

这会生成以下 API 端点:

  • GET /api/movies → index
  • GET /api/movies/{movie} → show
  • POST /api/movies → store
  • PUT /api/movies/{movie} → update
  • DELETE /api/movies/{movie} → destroy

注意:Laravel 的 API 路由默认带 /api 前缀,访问时需使用 http://localhost:8000/api/movies。

写完了。应该没什么问题了。大家自己测试吧

项目完结

本来还想着长期更新,有什么练习项目往里加的。不过嘛,项目给我玩炸了。我改了php版本,去改composer删了一大堆东西。结果项目炸了。只能说小皮面板到php8.0还好,再高版本我还不如自己装呢,问题一大堆。不过我也不知道是面板还是php自带的问题。php8.2.9这个版本,php.ini一堆扩展没装,装了也报错, 我这因为PC和本本两台电脑,只能说改来改去太麻烦了,老版本8.0用下算了。嗯,就先这样。此贴完结

`

解锁Windows下Composer切换PHP版本的奥秘 本文围绕 Windows 系统下 Composer 切换 PHP 版本展开,先阐述 Composer 与 PHP 版本关系的重要性,强调不同 PHP 版本特性及第三方库要求导致切换版本的必要性。接着说明查看当前 PHP 和 Composer 版本的方法,介绍安装多 PHP 版本的工具与方式,以及环境变量的作用。随后详细讲解切换 PHP 版本的步骤,包括修改系统环境变量、验证切换结果及配置 Composer 使用新 PHP 版本。还列举了可能遇到的问题及解决方案,最后总结关键步骤并建议定期更新相关版本。 阅读详情

相关推荐

Laravel快速入门项目:Hello, World!实战指南

本文还有配套的精品资源,点击获取 简介:本指南旨在帮助新手开发者了解并掌握Laravel框架的基本概念和工作流程,通过一个简单的“Hello, World!”项目,逐步介绍Laravel的安装、环境配置、Artisan命令、路由、视图、控制器、MVC架构、数据库操作、中间件、错误处理以及Blade模板和组件的使用。 1. Laravel框架简介 Larave...

weixin_42598278的博客 1663

【转帖】关于WinDbg的一些文章

A word for WinDbg:不错的入门文章,介绍了WinDbg的安装、Symbols、常用命令和一个调试示例。A word for WinDbg (2)More on debugging with SOS.DLL - enter Visual StudioTroubleshooting ASP.NET using WinDbg and the SOS extension、、

floweronwarmbed的专栏 5136

C#串口通讯实战:如何用SerialPort类搞定工业传感器数据采集(附完整代码)

本文详细介绍了如何使用C#的SerialPort类实现工业级传感器数据采集,涵盖串口通讯基础配置、数据帧处理、异常恢复机制及性能优化策略。通过实战代码示例,帮助开发者构建稳定可靠的工业数据采集系统,特别适合需要处理高频数据采集和复杂工业环境的场景。

weixin_42525551的博客 1086

Laravel+API 接口

Laravel框架已经非常智能的提供了404的处理,只要固定路径配置 404 错误页即可;资源控制器中 show,表示获取单一数据,传递id参数即可。是一种设计风格,推荐的一种规范,有助于统一协同和管理;注意配置数据库连接,账号、密码、数据库名、前缀等。中配置mysql数据库等服务用的wamp;实现一个生成API的方法,让控制器继承;专门创建一个API抽象类,并继承调用它。使用模型方式调用数据库链接,并返回数据。,用于数据库模型处理,用命令生成;创建好 API 资源控制器之后。安装Postman,测试接口

qq_56679246的博客 1424

从CCS3.3到CCS10:工程迁移与开发环境升级全攻略

本文详细介绍了从CCS3.3迁移到CCS10的完整流程与实战指南。针对老旧DSP项目,阐述了升级的必要性,并逐步指导CCS10的安装配置、界面操作、核心的工程移植步骤,以及移植后常见的代码调整与问题解决方案,帮助开发者高效完成开发环境升级,充分利用新版本的工具链提升开发效率。

weixin_29304985的博客 377

爱快路由(ikuai)多WAN口配置实战:提升网络带宽与稳定性

本文详细解析了爱快路由(ikuai)多WAN口配置的实战技巧,包括双线智能分流、毫秒级故障切换和带宽叠加利用等核心功能。通过七种配置方案和智能QoS策略,帮助企业提升网络带宽与稳定性,实现99.9%以上的高可用性。

weixin_30566063的博客 701

Laravel数据库操作之-增删改查CURD操作

数据库增删改查CURD操作// 添加数据 返回bool值 // $bool = DB::insert('insert into student(name,age) values(?,?)',['imooc',19]); // var_dump($bool);// 更新数据 // $num = DB::update('update student set age = ? where name = ?

成长是我们永恒不变的主旋律 2万+

损失函数大汇总(四十三)(Boundary Loss附公式推导与代码)

摘要 Boundary Loss是一种针对图像分割任务的边界优化损失函数,特别适用于小目标、细长结构和类别不平衡场景。它通过引入真实边界的有符号距离场(SDF),将边界距离优化问题转化为区域积分形式。与Dice Loss等区域重叠损失不同,Boundary Loss更关注预测边界与真实边界的精确对齐,而非整体区域重叠。其核心公式为像素级SDF值与预测概率的乘积求和,通过梯度调整使预测概率在真实边界内部升高、外部降低。该损失通常与区域型损失(如CE或Dice)联合使用,形成"区域分割+边界修正&qu

悦学共鸣,温柔以待,汇聚光芒,共同成长 355

Laravel 里最简单的CURD套路

Laravel 里最简单的CURD套路 控制器 namespace App\Http\Controllers; use App\Http\Requests\UserAddressRequest; use App\Models\UserAddress; ...

weixin_30566149的博客 170

vue2/3 - 详细实现内网使用离线百度地图功能,百度地图如何离线加载详细教程(内网部署及使用),在vue中无需网络离线使用百度地图相关功能,提供最新完整的瓦片资源下载及相关工具(示例代码,一键复制

vue,vue2,vue3,百度地图,离线使用百度地图,百度地图瓦片官方下载,vue内网使用百度地图离线无网络,断网情况下使用百度地图,vue离线百度地图教程,如何实现内网部署百度地图,无需联网离线使用,vue+ts实现离线百度地图 内网离线百度地图,如何在百度地图Vue项目中下载离线地图,百度离线地图加载不出来,百度地图离线使用不显示怎么办,怎么解决vue内网使用离线百度地图加载失败问题,vue实现离线地图+百度瓦片,vue引入百度离线地图,vue项目如何使用离线百度地图和自定义地图样式,百度离线地图的下

✅ 精选推荐文章 1万+

新能源汽车电机交流电流测量系统精度全链路分析

通过全链路误差建模与瓶颈分析,结合硬件选型优化与软件算法补偿,可将系统精度从4.2%提升至≤1% FS。本文所述方法论已应用于某800V电驱平台开发,实测电流控制精度达±0.8%,为高性能电机控制奠定基础。为例,深入剖析从互感器采集到CAN报文解析的全链路信号处理流程,揭示各环节误差来源及对最终精度的影响,为研发测试提供理论支撑。:±0.1%(电阻温漂与运放开环增益限制):运放增益带宽积(GBW)不足导致高频衰减。:±0.02%/℃(铁氧体材料温敏特性):±0.5%读数(磁芯饱和效应)

优快云-新能源汽车研发测试专业博主 1493

php laravel curD

Laravel PHP Web开发框架 Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。 本文为大家讲解了Laravel框架中的数据库CURD操作、连贯操作、链式操作的用法,包含大量数据库操作常用方法,感兴趣的同学参考下. Larav...

weixin_30700977的博客 92

小红书urlscheme和Activity

本文档详细介绍了小红书App的Deeplink跳转规范,涵盖了多个功能模块的跳转协议。主要内容包括:主页各Tab(关注、发现、购买)的跳转方式;不同类型笔记(图文/视频/长笔记)的详情页跳转参数;用户相关页面(主页/绑定/资料/消息等)的跳转协议;搜索功能(输入页/结果页)的跳转方式;以及话题、标签、专辑、H5页面等特殊场景的跳转实现。文档还提供了各跳转协议所需的参数说明,包括参数类型、默认值、是否必填等详细信息,并标注了不同版本和平台的兼容性要求。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 786

Laravel5.7如何集成Element-react实现简单的CURD

前言 MVC 模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。MVC 的目的是实现一种动态的程序设计,便于后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部份分离的同时,也赋予了各个基本部分应有的功能。MVC 架构对于 PHP 开发者来说应该都不陌生,我们在日常的项目开发中所使用到的

huangdj321的博客 384

【Bug已解决】codex file edit fails / Write operation denied — CodeX CLI 文件编辑失败解决方案

CodeX CLI 编辑文件时报写入被拒绝,本质是沙箱限制或权限不足。文中给出配置允许目录、修复权限、Git stash 管理冲突等完整方案。

一键难忘的博客 4300

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

网站PHP框架之Laravel5.5(六)resource controller资源控制器

在网站PHP框架之Laravel5.5(五)Controller控制器这篇文章中介绍了控制器的基本用法,非常便利。 但是一个项目中肯定会存在必不可少的CURD增删改查的逻辑,如果每一项功能都用一种HTTP请求的话,路由文件将会很难看。 Laravel针对这一块特地做了资源控制器。 在项目跟目录输入命令: php artisan make:controller UserController...

Galois的博客 1541

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

laravel-strongstub 扩展:在十秒内创建完成 CURD 增删改查的逻辑代码

Gitee仓库地址laravel-strongstub: 在十秒内创建完成 CURD 增删改查的逻辑。 安装 composer require --prefer-dist openstrong/laravel-strongstub 使用示例 创建一个包含验证规则的 Eloquent Model 模型 php artisan strongstub:model Models/StrongadminUser -t strongadmin_user -c mysql 参数说明: -t ..

kay_520的专栏 453

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【说云精选】后端之 Laravel 专刊

最近在使用 Laravel 做一个 side projcet,就顺便在社区里翻了一些相关的文章,在这里也分享给大家 Laravel 入门 使用laravel一分钟搭建CURD后台页面:这篇文章以最短的流程将一个 Laravel 应用 CURD 的流程进行了解说。虽然不可能一分钟完成其中的所有操作(除非准备了相关的资源),但是还是有学习的价值。10件在PHP 7中不要做的事情: 推荐你使

weixin_40581617的博客 243

七、PHP框架Laravel学习笔记——资源控制器

一.资源控制器 声明:资源控制器是某个特定场景下的产物,完全理解需要 PHP 项目基础; 比如开发过博客系统,留言帖子系统之类,具有类似思维,否则你懂的…; 只是学习了 PHP 基础,就立刻学习框架的同学,可以过一遍即可(不影响后续)…; 有一种控制器专门处理 CURD(增删改查),方法很多且方法名基本固定; 对于这种控制器,我们可以将它设置为资源型控制器,不要大量设置路由; 这里推荐直接使用命令行生成资源路由,比如:BlogController; php artisan make:controller

zep 660

Dcat Admin是一个基于laravel-admin二次开发而成的后台系统构建工具

Dcat Admin是一个基于laravel-admin二次开发而成的后台系统构建工具,只需极少的代码即可快速构建出一个功能完善的高颜值后台系统。支持页面一键生成CURD代码,内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的HTML代码,对后端开发者非常友好。开发文档地址演示地址(用户名、密码:admin、admin)福利彩蛋:没有好玩的 API 接口?上百款免费接口等你来,免费 API,免费 API 大全。

nbplus_007的博客 1763

入门后怎么精通PHP语言

从“入门”到“精通”是一条需要持续积累和实践的道路。精通 PHP 不仅仅是记住更多函数,而是深入理解语言底层机制、工程化开发流程、性能调优以及安全防御。以下是一份进阶指南,帮助你系统性地提升 PHP 技能树。

深山技术宅的博客 936

Laravel 框架响应设置和重定向&资源控制器 ③

Laravel是一种流行的开源PHP Web应用程序框架,由Taylor Otwell在2011年创建并发布。它提供了一个简洁优雅的语法和丰富的功能集,旨在使Web开发过程更快速、简单和愉悦。MVC架构模式:Laravel采用了MVC(Model-View-Controller)架构模,将应用程序的逻辑分为不同的层,提高了代码的可维护性和可测试性。简洁的语法和表达力:Laravel框架支持具有简洁而表达力的语法,使得编写清晰、易读、易维护的代码成为可能。

m0_61490399的博客 596

Laravel - 上手实现 - 增删改查

拿到一个框架,除了解框架,还要能实现基本的CURD操作。 添加 1、配置路由,指定添加页面; // routes/web.php 中增加如下: // 添加页面、存放路径 Laravel7/resources/views/Users/add.blade.php // 视图文件默认以 .blade.php 结尾 Route::get(’/add’, function(){ return view(‘U...

weixin_45120972的博客 409

laravel ajax curd 搜索登录判断功能的实现例子解析

封装一个Ajax函数是前端开发中常见的需求,用于简化异步请求的发送和处理。以下是一个详细的Ajax函数封装示例,使用JavaScript原生代码实现,适用于大多数现代浏览器。

IT老农民的博客 922

Laravel Swagger 使用

Laravel https://github.com/DarkaOnLine/L5-Swagger 安装: composer require "darkaonline/l5-swagger" 使用: php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider" php artisan l5-swagger:generate 案例 /** * @OA\Get( * path="/projects/{id

廖圣平 2836

如何使用Laravel快速实现CRUD(即创建、读取、更新和删除)

本教程演示了如何使用 Laravel 的 Eloquent ORM 在 Laravel 应用程序中执行这些操作,以及如何使用服务器部署 Laravel CRUD 应用程序。

WPHunter的编程技术资料库! 1786
上一篇: php项目 学生管理 MVC模式
下一篇: 仿小红书项目 第一章 环境搭建
四季豆豆豆
博客等级 码龄6年 101粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值