您的位置:首页 > 编程语言 > PHP开发

laravel学习之学生管理项目基础剖析

2016-11-21 19:13 387 查看
初学laravel的时候,由于之前自学过TP框架,感觉laravel的目录好乱。但是被称为最美的框架一定是有原因的。

然后我跟着慕课网的 天秤VS永恒 老师学做了一个学生管理项目。并且我已经放在了我自己的项目中。如果你喜欢的可以去看下。

https://github.com/XiaoTommy/laravel-demo

以下是我的项目中的一些注释,只适合初学laravel没有一点头绪的童鞋。这里都是基本的知识。基本看一遍就会了。当然,我也正在一步一步的学习laravel。laravel是一个及其浩大的任务。一起加油。

当然,我的其中肯定会有很多错误,非常希望你能指出来。毕竟我也是初学者嘛~关于laravel的知识点还有很多很多。我这里仅仅的基础的也不是特别的全。但是都是十分重要的。

laravel中的基本目录, 这里我使用的phpstorm编辑器。非常强大。





一下是StudentController 代码,其中一些注释对理解很有用处(MVC中的Controller)

<?php
namespace App\Http\Controllers;

use App\Student;
use Illuminate\Http\Request;

//该文件是MVC框架中的Controller
class StudentController extends Controller{

//显示学生列表页 ,该方法对应的view文件位于 resources/views/student/index.blade.php 下
public function index(){

//创建模型,以实现以下功能
$students = Student::get();

//paginate 是创建分类的意思 每页20条信息
$students = Student::paginate(20);

//返回 resources/views/student/index 文件,并且输出student实例中的数据,也就是我们从数据库中找到的数据
return view('student.index',[
'students'=>$students,
]);
}

//显示添加学生信息页,该方法对应的view文件位于 resources/views/student/create.blade.php 下
public function create(Request $request){

//创建实例
$Student = new Student();

//判断时候收到POST请求,因为页面原先是get请求。所以需要判断时候是POST请求,然后才能创建
if($request->isMethod('POST')) {
//1.控制器验证。这个地方我们使用控制器验证(也叫作数据过滤)。验证用户输入的数据是否合法。
//                $this->validate($request,[
//                    'Student.name'=>'required|min:2|max:20',
//                    'Student.age'=>'required|integer',
//                    'Student.sex'=>'required|interger',
//                ],[
//                      //此处是为了在页面上显示报错数据。:attribute是占位符的意思
//                    'required'=>':attribute 为必填项',
//                    'min'=>':attribute 长度不符合要求',
//                    'max'=>':attribute 长度不能超过20个字符',
//                    'interger'=>':attribute 必须是整形',
//                ],[
//响应占位符
//                    'Student.name'=>'姓名',
//                    'Student.age'=>'年龄',
//                    'Student.sex'=>'性别',
//                ]);

//2.validate类验证
$validator = \Validator::make($request->input(),[
'Student.name'=>'required|min:2|max:20',
'Student.age'=>'required|integer',
'Student.sex'=>'required|integer',
],[
'required'=>':attribute 为必填项',
'min'=>':attribute 长度不符合要求',
'max'=>':attribute 长度不能超过20个字符',
'integer'=>':attribute 必须是整形',
],[
'Student.name'=>'姓名',
'Student.age'=>'年龄',
'Student.sex'=>'性别',
]);

//如果有错误就重定向到指定页面。redirect()---重定向  back()---重定向到上一个页面  withError()---找出报错信息  withInput()---输出报错信息
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}

//接受request过来的信息
$data = $request->input('Student');

//向数据库中添加信息,并且判断是否添加成功
if (Student::create($data)) {
//如果添加成功,则重定向到index页面,并且输出添加成功的信息
return redirect('student/index')->with('success', '添加成功');
} else {
//否则,退回上一个页面
return redirect()->back();
}
}

//经过一系列的创建实例,验证信息,添加数据库的操作后,把添加的数据返回到创建页面,
return view('student.create',[
//这个操作是为了在view中显示响应的数据
'student'=>$Student
]);
}

//向数据库保存添加,接受传过来的 $request,然后保存起来,此方法没有对应的view页面,作用就是保存数据到数据库
public function save(Request $request) {
$data = $request->input('Student');

//创建一个student实例,并且分别把对应的name age sex 填入到数据库中
$student = new Student();
$student->name=$data['name'];
$student->age=$data['age'];
$student->sex=$data['sex'];

//如果添加成功,则返回index页面,否则返回上页面
if($student->save()){
return redirect('student/index');
}else{
return redirect()->back();
}
}

//更新学生信息页面。该方法对应的view文件位于 resources/views/student/update.blade.php 下
//更新信息需要注意的是,页面效果和create差不多,但是首先要接受到响应id的数据,显示到页面才能修改
public function update(Request $request, $id){

//找到响应ID的学生信息,并且赋给 $student 这个数组
$student = Student::find($id);

//判断传过来的时候是POST方法
if($request->isMethod('POST')){

//进行数据验证
$this->validate($request, [
'Student.name' => 'required|min:2|max:20',
'Student.age' => 'required|integer',
'Student.sex' => 'required|integer',
], [
'required' => ':attribute 为必填项',
'min' => ':attribute 长度不符合要求',
'integer' => ':attribute 必须为整数',
], [
'Student.name' => '姓名',
'Student.age' => '年龄',
'Student.sex' => '性别',
]);

//更新就类似于重新输入而已,所以和create步骤基本相同
$data = $request->input('Student');
$student->name = $data['name'];
$student->age = $data['age'];
$student->sex = $data['sex'];

//判断时候保存
if($student->save()){
return redirect('student/index')->with('success', '修改成功-'.$id);
}
}

//显示更新页面,并且伴随着更新之后的数据
return view('student.update',[
'student'=>$student
]);
}

//学生详细信息页面,该方法对应的view文件位于 resources/views/student/detail.blade.php 下
public function detail($id){
//根据id从数据库中找到相应的数据
$student = Student::find($id);

//显示响应的页面,并且输出响应的内容
return view('student.detail', [
'student'=> $student
]);
}

//学生删除方法,该方法没有响应的页面,只有操作成功或者失败后显示响应的信息
public function delete($id){
//根据id找到响应的数据
$student = Student::find($id);
//从数据库中删除数据。这里就是laravel厉害的地方了,直接一个delete就可以解决了。第一次写的时候,我都不敢相信就这样就可以删除。有时间的话一定要好好研究源代码
if($student->delete()){
//删除成功,跳转页面
return redirect('student/index')->with('success', '删除成功-'.$id);
}else{
return redirect('student/index')->with('error', '删除失败'.$id);
}
}
}


一下是Student 代码,其中一些注释对理解很有用处(MVC中的Model)

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

//该页面属于MVC中的Model,这里是student Model
class Student extends Model{
//定义类常量,在数据库中储存10 20 30 来代替相应的 未知 男 女 可以节省数据库的压力。而且操作也简单
const SEX_UN = 10;      //未知
const SEX_BOY = 20;     //男
const SEX_GRIL = 30;    //女

//数据库中响应的表名是 student
protected $table = 'student';

//为了可以传参数的时候多参数的传参,我们自定义可以传递以下三个参数
protected $fillable = ['name', 'age', 'sex'];

//默认使用时间戳功能,当我们在数据库中创建 create_at updated_at 字段的时候,laravel会自动帮我们生成响应的时间戳
public $timestamps = true;

//禁止时间戳转换为字符串时间
protected function getDateFormat(){
return time();
}

//select的时候可以避免时间转换成字符串时间
protected function asDateTime($val){
return $val;
}

//创建一个sex()方法,用来判断该选项之前是否已经选定,如果选定,返回之前的。没有选定,则显示未知。
//响应的name age 没有类似的方法是因为他们有 old()
public function sex($ind = null){
$arr = [
self::SEX_UN => '未知',
self::SEX_BOY => '男1',
self::SEX_GRIL => '女',
];

if($ind !== null){
return array_key_exists($ind, $arr)?$arr[$ind]:$arr[self::SEX_UN];
}
return $arr;
}
}


另外MVC中的view没有贴出来。

路由 routes.php 中的相关代码

//路由,这属于中间件式路由,如果没有放在数组中则是普通的路由
Route::group(['middleware' => ['web']], function () {
//路由的格式如下,url访问的是 localhost/laravel-demo/public/student/index 相应对就可以连接到 StudentController中的index方法中
Route::get('student/index', ['uses'=>'StudentController@index']);
Route::any('student/create', ['uses'=>'StudentController@create']);
Route::any('student/save', ['uses'=>'StudentController@save']);
//此处的路由属于传参路由,url格式是 localhost/laravel-demo/public/student/update/1012
Route::any('student/update/{id}', ['uses'=>'StudentController@update']);
Route::any('student/detail/{id}', ['uses'=>'StudentController@detail']);
Route::any('student/delete/{id}', ['uses'=>'StudentController@delete']);
});

另外推荐 天秤VS永恒 的课程 http://www.imooc.com/search/?words=laravel  如果你有更好的laravel自学课程,我非常希望你能留言告诉我。让咱们一起学习laravel。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  laravel 框架