新手指导:laravel项目上手代码简易流程梳理

有新进的同事需要指导,顺便梳理一下新手第一天进公司做laravel项目的上手简易流程,仅供参考,欢迎高手指点。

开发前准备

分析业务,梳理需求,理清业务操作流程(这步非常重要,但本节不讨论对需求的分析和理解)

主要是查看原型图,确认需求,梳理数据流向和操作流程,画出流向图

开始代码

1、建立数据模型、控制器、资源文件

php artisan make:controller PhotoController --resource --model=a_model

以上命令使用后,自动生成控制器文件,模型文件,资源模板blade

2、根据业务编写模型文件,确定数据库表字段,模型与数据库表对应

LaravelEloquent ORM 提供了一个漂亮、简洁的 ActiveRecord 实现来和数据库交互。每个数据库表都有一个对应的**「模型」**用来与该表交互。你可以通过模型查询数据表中的数据,以及在数据表中插入新记录。
在开始之前,请确保在 config/database.php 中配置数据库连接。更多关于数据库配置的信息,请查看 文档。

模型定义#

首先,创建一个 Eloquent 模型。 模型通常在 app\Models 目录中,但你可以根据 composer.json 文件将他们放置在可以被自动加载的任意位置。所有的 Eloquent 模型都需要继承 Illuminate\Database\Eloquent\Model 类。
创建模型最简单的方法就是使用 make:model Artisan 命令:

  php artisan make:model a_model

如果要在生成模型的时候生成 数据库迁移,可以使用 –migration-m 选项:

php artisan make:model a_model --migration

php artisan make:model a_model -m

生成模型时,你可能需要生成各种其他类型的类,例如模型工厂、seeders 和 控制器。另外,这些选项可以组合在一起一次创建多个类:

php artisan make:model a_model --factory
php artisan make:model a_model -f

php artisan make:model a_model --seed
php artisan make:model a_model -s

php artisan make:model a_model --controller
php artisan make:model a_model -c

php artisan make:model a_model -mfsc

示例

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class CModel extends Model
{
    const CREATED_AT = 'create_time';//定义创建时间,系统自动生成
    const UPDATED_AT = 'update_time';//定义更新时间,系统自动生成
    const DELETED_AT = null;//取消删除自动生成时间
   
   protected $dateFormat='U';//时间格式定义,U为时间戳格式,其他格式请自定义查询dataForm参数

    protected $primaryKey = 'id';//主键
    protected $table = 'form';//关联数据库表名称
   
   protected $fillable = ['title','title','create_time','update_time','sort','status'];//可操作字段

    /**
     * 获取关联的模型
     */
    public function aModel()
    {
        return $this->hasOne('App\Models\AModel','a_id');
    }

    /**
     * 获取关联的模型
     */
    public function bModel()
    {
        return $this->hasMany('App\Models\BModel','b_id');
    }

    /**
     * @param $sInfo
     * @param $map
     * @return array
     * 获取a表关联的b表
     */
    public static function ListByParam($sInfo, $map)
    {
        //参数空值默认处理
        $limitNum = isset($sInfo["limit"]) && $sInfo["limit"] > 0 ? $sInfo["limit"] : 9;
        $page = isset($sInfo["page"]) ? $sInfo["page"] : 1;
        $offset = ($page - 1) * $limitNum + 1;
        $showColumns=['id','title'];
		//查询数据表
        $list = Data::join('a', 'a.id', '=', 'b.link_id')
            ->where(function ($query) use ($map, $sInfo) {
                if ($map && count($map) > 0) {
                    $query->where($map);
                }
            })
            ->limit(intval($limitNum))
            ->orderBy('b.sort', 'asc')
            ->get($showColumns);

        return $list;
    }
}

3、生成数据表和测试数据

生成数据表迁移

使用 make:migration Artisan 命令 命令来创建迁移:

php artisan make:migration create_users_table

–table–create 选项也可用于确定表的名称以及是否在迁移中创建新的数据表。这些选项用指定的迁移模板预先填充指定的数据表:

php artisan make:migration create_users_table --create=users

php artisan make:migration add_votes_to_users_table --table=users

例如,以下迁移将创建一个 flights 表:

<?php

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

class CreateFlightsTable extends Migration
{
    /**
     * 运行迁移
     *
     * @return void
     */
    public function up()
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('airline');
            $table->timestamps();
        });
    }

    /**
     * 回滚迁移
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('flights');
    }

}

执行迁移#

执行以下 migrate Artisan 命令,来执行未执行过的迁移:

php artisan migrate

4、控制器写业务逻辑

资源控制器操作处理

GET	   /photos	                index	photos.index
POST   /photos/create	        create	photos.create
POST   /photos	                store	photos.store
GET	   /photos/{photoid}	    show	photos.show
GET	   /photos/{photo}/edit	    edit	photos.edit
PUT/PATCH	/photos/{photo}	    update	photos.update
DELETE	    /photos/{photo}	    destroy	photos.destroy

编写控制器逻辑

<?php

namespace App\Http\Controllers;

use App\Repositories\UserRepository;

class UserController extends Controller
{
    /**
     * 用户 repository 实例。
     */
    protected $users;

    /**
     * 创建一个新的控制器实例。
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }
    

}

5、路由添加

路由添加主要在Routes 目录#

routes 目录包含应用程序的所有路由定义。默认情况下,Laravel 包含几个路由文件:web.php, api.php, console.php 以及 channels.php
web.php 文件包含 RouteServiceProvider 放置在 web 中间件组中的路由,后者提供会话状态、CSRF 保护和 cookie 加密。如果您的应用程序不提供无状态的 RESTful API,那么您的所有路由都很可能在 web.php 文件。
api.php 文件包含 RouteServiceProvider 放置在 api 中间件组中的路由,后者提供速率限制。这些路由是无状态的,因此通过这些路由进入应用程序的请求将通过令牌进行身份验证,并且不能访问会话状态。
console.php 文件是您可以定义所有基于闭包的控制台命令的地方。每个闭包都绑定到一个命令实例,允许使用一种简单的方法与每个命令的进行 IO 交互。尽管这个文件没有定义 HTTP 路由,但是它定义了应用程序中基于控制台的入口点(路由)。
channels.php 文件是您可以注册应用程序支持的所有事件广播频道的位置。

普通路由

普通路由在route文件夹里面的web.php添加,是无状态的,当然,web.php里面可以自定义分组,哪些路由需要鉴权,哪些作为公共访问路径,可以使用其他插件包作为中间件控制拦截,根据业务需要灵活处理。

//直接返回
Route::get('foo', function () {
    return 'Hello World';
});

//指定控制器返回
Route::get('/user', [UserController::class, 'index']);

//同时响应get和post
Route::match(['get', 'post'], '/', function () {
    //
});

//响应所有类型请求
Route::any('/', function () {
    //
});
//可用的路由方法
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
视图路由

如果你的路由只需要返回一个视图, 你可以使用 Route::view 方法。 它和 redirect 一样,提供了一个简单的方式,而无需定义完整的路由或控制器。 view 方法接受一个 URI 作为第一个参数,一个视图名作为第二个参数。此外,还可以通过第三个可选参数将一个数据数组传递给视图:

Route::view('/welcome', 'welcome');

Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

[^]: 注意:在视图路由中使用路由参数时,以下参数由 Laravel 保留,不能使用:view,data,status 和 headers。

注意:在视图路由中使用路由参数时,以下参数由 Laravel 保留,不能使用:view,data,status 和 headers。

api路由

常用API路由插件包Dingo/api
所有接口可以在api.php里面添加,可用中间件控制鉴权

6、其他扩展(待续)

事件
中间件
广播
队列
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

费尔规则

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值