经过一段时间的谷歌+百度,基本上搞清楚了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;