有新进的同事需要指导,顺便梳理一下新手第一天进公司做laravel项目的上手简易流程,仅供参考,欢迎高手指点。
开发前准备
分析业务,梳理需求,理清业务操作流程(这步非常重要,但本节不讨论对需求的分析和理解)
主要是查看原型图,确认需求,梳理数据流向和操作流程,画出流向图
开始代码
1、建立数据模型、控制器、资源文件
php artisan make:controller PhotoController --resource --model=a_model
以上命令使用后,自动生成控制器文件,模型文件,资源模板blade
2、根据业务编写模型文件,确定数据库表字段,模型与数据库表对应
Laravel 的 Eloquent 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里面添加,可用中间件控制鉴权