Php laravel 留言板 curd 实战

发布于:2025-04-11 ⋅ 阅读:(41) ⋅ 点赞:(0)

1. 项目创建

首先我们用composer创建项目 , composer会根据当前的php版本 帮我们选择支持的最高版本

composer create-project --prefer-dist laravel/laravel myblog

laravel新版本比较激进 ,需要最低 php7 支持

2. 项目配置 数据库配置 ,时区配置 ,路由配置等等

项目配置主要在根目录下的 .env 文件中

主要是数据库配置   和 redis的配置 

//数据库配置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
//redis配置
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

注意 config / app.php 文件 ,改时区,一般默认是PRC

'timezone' => 'PRC',

3. 留言板增删改查   

public function addsave(Request $request){
        $postdata = $request->all();
        //验证数据
        $rules = [
            'title' => 'required|unique:dw_msg|max:100',  /*此处规则为必须  标题唯一,验证器会到dw_msg里找   最长长度为100个字符*/
            'content' => 'required|max:100',
        ];
        $validator = Validator::make($postdata, $rules);
        if ($validator->fails()) {
            return redirect('error')->withErrors($validator)->withInput();
        }else{

            $u = json_decode(json_encode(Session::get('userinfo')[0]),true);
            $res = DB::insert('insert into dw_msg (title,content,uid,time) values (:title,:content,:uid,:time)', ['title'=>$postdata['title'],'content'=>$postdata['content'],'uid'=>$u['uid'],'time'=>time() ]);
            if($res){
                return redirect('/');
            }else{
                echo 'insert  data  fails';
                exit();
            }
        }

    }

这里主要介绍添加数据这个操作 。

这里使用到  接收参数的Request包   , 验证数据的Validator包  和 数据库DB包  和 会话控制包 Session  ,分别需要在头部引入

use Illuminate\Http\Request; //默认导入的包
use Illuminate\Support\Facades\Validator;
use DB;  //等同于 use Illuminate\Support\Facades\DB;
use Session;

可以看到类中大量导入 Illuminate\Support\Facades    这个命名空间下的类 。

Facades 是 laravel 中比较核心的类库 ,包括诸如 session ,DB,Route 等等底层类

4. 分页

laravel中实现分页也比较简单

$results = DB::table('dw_msg')->orderBy('id','desc')->paginate(8);
return view('msg.index', ['list'=>$results]);

视图页码显示:

{{$list->links()}}

默认显示样式:

还有一种是  simplePaginate(15);     这种只显示上一页 和下一页

5. 登录模块 和 session 的使用

$res = DB::select('select * from dw_user where username = :u', ['u' => $postData['username']]);
$tmp = json_decode(json_encode($res),true);
$md_for_pass = set_passwords($postData['password'],$tmp[0]['salt']);
if($tmp[0]['password']== $md_for_pass){
    Session::put('userinfo',$res);
    Session::save();
    echo 'login success';
    exit();
}else{
    echo 'login fail';
    exit();
}

对象转换数组的方法:

$tmp = json_decode(json_encode($res),true);

一般DB类查询数据 ,都会返回  stdclass 对象   ,可直接使用  ,可转换使用

6. 加入验证码

验证码使用composer引入第三方的类

composer require "gregwar/captcha 1.*"

控制器:

namespace App\Http\Controllers\User;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Gregwar\Captcha\CaptchaBuilder;
use Session;

class codeController extends Controller
{

    public function captcha($temp)

    {
        $builder = new CaptchaBuilder();

        $builder->build(100,32);

        $phrase = $builder->getPhrase();

        //把内容存入session

        Session::flash('milkcaptcha', $phrase); //存储验证码

        ob_clean();

        return response($builder->output())->header('Content-type','image/jpeg');

    }

}

视图使用:

验证码:<img src="/getcode/1" alt="点击刷新" onclick="this.src='/getcode/'+ Math.random();"  style="cursor:pointer" align="absmiddle"/> 

参考:laravel自带验证码类的使用 - 程序员大本营

7. redis的使用

composer导入:

composer require predis/predis

首先需要引入

use Illuminate\Support\Facades\Redis;


try{
    Redis::set('key','value123123');
    $value = Redis::get('key');
    echo $value;
}catch (\Exception $e){
    //返回服务器内部错误 500 的响应码
    echo $e->getMessage();
}

8. model层的使用

namespace App;

use Illuminate\Database\Eloquent\Model;

class dw_msg extends Model
{
    //
    protected $table="dw_msg";
    protected $primaryKey = "id";
    protected $fillable = [
        'title', 'content', 'uid',
    ];
    public $timestamps = false;
}

1. protected $table="dw_msg"     默认规则是模型类名的复数作为与其对应的表名,除非在模型类中明确指定了其它名称 

  

2. protected $primaryKey = "id";  默认每张表的主键名为id ,你可以在模型类中定义一个$primaryKey 属性来覆盖该约定

3. protected $fillable   用于调用create()  方法时候 的白名单。 如图定义了 'title', 'content', 'uid' 字段

4. public $timestamps = false;  默认情况下,Eloquent 期望created_at 和updated_at 已经存在于数据表中,如果你不想要这些 Laravel自动管理的列,在模型类中设置$timestamps 属性为false

常见的增删改查方法,具体可查看线上手册

//获取所有记录
$flights = Flight::all();

// 获取匹配查询条件的第一个模型...
$flight = App\Flight::where('active', 1)->first();

//插入数据
$flight = new Flight;
$flight->name = $request->name;
$flight->save();

//更新数据
$flight = App\Flight::find(1);
$flight->name = 'New Flight Name';
$flight->save();

//删除
$deletedRows = App\Flight::where('active', 0)->delete();

9.要注意的几个问题

        

    9.1  公共函数如何添加

    1.在app/Helper/下新建functions.php 文件 

    2. 打开项目根目录下的 composer.json 文件,找到"autoload" 配置项,补充如下代码:

"files":[
            "app/Helper/functions.php"
        ]

    

   3. 在根目录执行 

composer dump-auto


网站公告

今日签到

点亮在社区的每一天
去签到