Laravel5.5的MVC

大笑经过一段时间的谷歌+百度,基本上搞清楚了Laravel5.5的MVC套路。

PS:现阶段的总结,以后也许有更妙的,会不定时更新的。

一、控制器 \app\Http\Controllers\Controller.php

增加一个函数,方便所有控制器使用,主要是将Laravel toArray后再次toarray好得到我想要的数组

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    //对象转数组
    public function object_to_array($obj){
        $_arr=is_object($obj)?get_object_vars($obj):$obj;
        foreach($_arr as $key=>$val){
            $val=(is_array($val))||is_object($val)?$this->object_to_array($val):$val;
            $arr[$key]=$val;
        }
        return $arr;
    }

}

二、控制器 \app\Http\Controllers\IndexController.php

根据我的理解,MVC按顺序应该是CMV才对。。。下面给出了控制器中的常用操作方法和用模型的方法,注意观察。

<?php
namespace App\Http\Controllers;
use App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use App\Http\model\Test;
class IndexController extends Controller {

    /**
     * 显示首页。
     *
     * @return Response
     */
    public function index(){
        //基本设置
        $title= 'index page';
        //查询数据
        $Test = new Test();
        $list = $Test->readTest();
        //dump($list);exit;

        //添加
        //$sql="insert into think_test (name,email) values ('lee','[email protected]')";
        //$result=DB::insert($sql);
        $array_data=array();
        $array_data[0]['name']='tom';
        $array_data[0]['email']='[email protected]';
        $array_data[1]['name']='jerry';
        $array_data[1]['email']='[email protected]';
        $result=DB::table('think_test')->insert($array_data);
        //dump($result);exit;
        if($result===false){
            echo 'insert error';exit;
        }

        //列表
        /*$sql="select name from think_test where id>1 order by id desc limit 0,20";
        //echo $sql;exit;
        $list=DB::select($sql);*/
        /*$list=DB::table('think_test')->select('id','name','email')->where('id', '>', 1)->offset(2)->limit(2)->orderBy('id', 'desc')->get()->toArray();
        $list=$this->object_to_array($list);*/
        //dump($list);exit;

        //单行
        $info= DB::table('think_test')->where('id','>', '1')->first();
        $info=$this->object_to_array($info);
        //dump($info);exit;

        //单字段
        $email = DB::table('think_test')->where('id','=', '3')->value('email');
        //dump($email);exit;

        //指定字段增加或减少
        //$result=DB::table('think_test')->where('id','=', '1')->increment('votes', 5); //指定字段增加,返回的是影响的行数...
        //$result=DB::table('think_test')->where('id','=', '1')->decrement('votes', 5); //指定字段减少,返回的是影响的行数...
        //dump($result);exit;

        //删除
        //$result=DB::table('think_test')->where('id','>', '8')->delete();    //返回影响的行数
        //dump($result);exit;

        //清空表 删减表
        //$result=DB::table('think_test')->truncate();    //成功清空时返回null
        //dump($result);exit;
        return view('index',compact('title','list','info','email'));
    }

}

三、模型 新建 \app\Http\model文件夹,然后 新建 \app\Http\model\Basic.php

PS:建这个主要是为了其他模型继承这个基本模型,类似控制器中的BasicController作用(大笑也不知道这样写是否符合规范,只是实现了我想要的效果)

<?php
namespace App\Http\model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Basic extends Model
{
    //对象转数组
    public function object_to_array($obj){
        $_arr=is_object($obj)?get_object_vars($obj):$obj;
        foreach($_arr as $key=>$val){
            $val=(is_array($val))||is_object($val)?$this->object_to_array($val):$val;
            $arr[$key]=$val;
        }
        return $arr;
    }
    
}

四、模型 新建 \app\Http\model\Test.php

<?php
namespace App\Http\model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Test extends Basic
{
    protected $table = 'think_test';
    public $timestamps = false;

    //查
    public function readTest(){
        $list=DB::table('think_test')->select('id','name','email')->where('id', '>', 1)->offset(2)->limit(2)->orderBy('id', 'desc')->get()->toArray();
        $list=$this->object_to_array($list);
        return $list;
    }

}

五、视图 \resources\views\index.blade.php

主要是展示数据

<div class="content">

                <div class="links">
                    <p>{{ $info['id'] }}</p>
                    <p>{{ $info['name'] }}</p>
                    <p>{{ $info['email'] }}</p>
                </div>

                <div class="links">
                    <p>{{ $email}}</p>
                </div>

                <div class="links">
                    @foreach($list as $item)
                        <p>ID:{{ $item['id']}}  Name:{{ $item['name']}}  Email:{{ $item['email']}}</p>
                    @endforeach
                </div>

                <div class="links">
                    {{$list[1]['name']}}
                </div>

            </div>

六、附其他:

路由:

Route::get('/', 'IndexController@index');

数据库设置:

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', 'root'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

数据表创建:

CREATE TABLE `think_test` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主ID',
  `name` varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT '姓名',
  `email` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT 'email',
  `votes` int(6) NOT NULL DEFAULT '0' COMMENT '票数',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=65 DEFAULT CHARSET=utf8mb4;


猜你喜欢

转载自blog.csdn.net/leejianjun/article/details/78814329