初学laravel的时候,由于之前自学过TP框架,感觉laravel的目录好乱。但是被称为最美的框架一定是有原因的。

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

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

 

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

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

 

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

 

 

 

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

 

[php] view plain copy
 
  1. <?php  
  2. namespace App\Http\Controllers;  
  3.   
  4. use App\Student;  
  5. use Illuminate\Http\Request;  
  6.   
  7. //该文件是MVC框架中的Controller  
  8. class StudentController extends Controller{  
  9.   
  10.     //显示学生列表页 ,该方法对应的view文件位于 resources/views/student/index.blade.php 下  
  11.     public function index(){  
  12.   
  13.         //创建模型,以实现以下功能  
  14.        $students = Student::get();  
  15.   
  16.         //paginate 是创建分类的意思 每页20条信息  
  17.        $students = Student::paginate(20);  
  18.   
  19.         //返回 resources/views/student/index 文件,并且输出student实例中的数据,也就是我们从数据库中找到的数据  
  20.         return view('student.index',[  
  21.             'students'=>$students,  
  22.         ]);  
  23.     }  
  24.   
  25.     //显示添加学生信息页,该方法对应的view文件位于 resources/views/student/create.blade.php 下  
  26.     public function create(Request $request){  
  27.   
  28.         //创建实例  
  29.         $Student = new Student();  
  30.   
  31.         //判断时候收到POST请求,因为页面原先是get请求。所以需要判断时候是POST请求,然后才能创建  
  32.          if($request->isMethod('POST')) {  
  33.                 //1.控制器验证。这个地方我们使用控制器验证(也叫作数据过滤)。验证用户输入的数据是否合法。  
  34. //                $this->validate($request,[  
  35. //                    'Student.name'=>'required|min:2|max:20',  
  36. //                    'Student.age'=>'required|integer',  
  37. //                    'Student.sex'=>'required|interger',  
  38. //                ],[  
  39. //                      //此处是为了在页面上显示报错数据。:attribute是占位符的意思  
  40. //                    'required'=>':attribute 为必填项',  
  41. //                    'min'=>':attribute 长度不符合要求',  
  42. //                    'max'=>':attribute 长度不能超过20个字符',  
  43. //                    'interger'=>':attribute 必须是整形',  
  44. //                ],[  
  45.                         //响应占位符  
  46. //                    'Student.name'=>'姓名',  
  47. //                    'Student.age'=>'年龄',  
  48. //                    'Student.sex'=>'性别',  
  49. //                ]);  
  50.   
  51.             //2.validate类验证  
  52.             $validator = \Validator::make($request->input(),[  
  53.                 'Student.name'=>'required|min:2|max:20',  
  54.                 'Student.age'=>'required|integer',  
  55.                 'Student.sex'=>'required|integer',  
  56.             ],[  
  57.                 'required'=>':attribute 为必填项',  
  58.                 'min'=>':attribute 长度不符合要求',  
  59.                 'max'=>':attribute 长度不能超过20个字符',  
  60.                 'integer'=>':attribute 必须是整形',  
  61.             ],[  
  62.                 'Student.name'=>'姓名',  
  63.                 'Student.age'=>'年龄',  
  64.                 'Student.sex'=>'性别',  
  65.             ]);  
  66.   
  67.             //如果有错误就重定向到指定页面。redirect()---重定向  back()---重定向到上一个页面  withError()---找出报错信息  withInput()---输出报错信息  
  68.             if ($validator->fails()) {  
  69.                 return redirect()->back()->withErrors($validator)->withInput();  
  70.             }  
  71.   
  72.             //接受request过来的信息  
  73.             $data = $request->input('Student');  
  74.   
  75.             //向数据库中添加信息,并且判断是否添加成功  
  76.             if (Student::create($data)) {  
  77.                 //如果添加成功,则重定向到index页面,并且输出添加成功的信息  
  78.                 return redirect('student/index')->with('success', '添加成功');  
  79.             } else {  
  80.                 //否则,退回上一个页面  
  81.                 return redirect()->back();  
  82.             }  
  83.         }  
  84.   
  85.         //经过一系列的创建实例,验证信息,添加数据库的操作后,把添加的数据返回到创建页面,  
  86.         return view('student.create',[  
  87.             //这个操作是为了在view中显示响应的数据  
  88.             'student'=>$Student  
  89.         ]);  
  90.     }  
  91.   
  92.     //向数据库保存添加,接受传过来的 $request,然后保存起来,此方法没有对应的view页面,作用就是保存数据到数据库  
  93.     public function save(Request $request) {  
  94.         $data = $request->input('Student');  
  95.   
  96.         //创建一个student实例,并且分别把对应的name age sex 填入到数据库中  
  97.         $student = new Student();  
  98.         $student->name=$data['name'];  
  99.         $student->age=$data['age'];  
  100.         $student->sex=$data['sex'];  
  101.   
  102.         //如果添加成功,则返回index页面,否则返回上页面  
  103.         if($student->save()){  
  104.             return redirect('student/index');  
  105.         }else{  
  106.             return redirect()->back();  
  107.         }  
  108.     }  
  109.   
  110.     //更新学生信息页面。该方法对应的view文件位于 resources/views/student/update.blade.php 下  
  111.     //更新信息需要注意的是,页面效果和create差不多,但是首先要接受到响应id的数据,显示到页面才能修改  
  112.     public function update(Request $request, $id){  
  113.   
  114.         //找到响应ID的学生信息,并且赋给 $student 这个数组  
  115.         $student = Student::find($id);  
  116.   
  117.         //判断传过来的时候是POST方法  
  118.         if($request->isMethod('POST')){  
  119.   
  120.             //进行数据验证  
  121.             $this->validate($request, [  
  122.                 'Student.name' => 'required|min:2|max:20',  
  123.                 'Student.age' => 'required|integer',  
  124.                 'Student.sex' => 'required|integer',  
  125.             ], [  
  126.                 'required' => ':attribute 为必填项',  
  127.                 'min' => ':attribute 长度不符合要求',  
  128.                 'integer' => ':attribute 必须为整数',  
  129.             ], [  
  130.                 'Student.name' => '姓名',  
  131.                 'Student.age' => '年龄',  
  132.                 'Student.sex' => '性别',  
  133.             ]);  
  134.   
  135.             //更新就类似于重新输入而已,所以和create步骤基本相同  
  136.             $data = $request->input('Student');  
  137.             $student->name = $data['name'];  
  138.             $student->age = $data['age'];  
  139.             $student->sex = $data['sex'];  
  140.   
  141.             //判断时候保存  
  142.             if($student->save()){  
  143.                 return redirect('student/index')->with('success', '修改成功-'.$id);  
  144.             }  
  145.         }  
  146.   
  147.         //显示更新页面,并且伴随着更新之后的数据  
  148.         return view('student.update',[  
  149.             'student'=>$student  
  150.         ]);  
  151.     }  
  152.   
  153.     //学生详细信息页面,该方法对应的view文件位于 resources/views/student/detail.blade.php 下  
  154.     public function detail($id){  
  155.         //根据id从数据库中找到相应的数据  
  156.         $student = Student::find($id);  
  157.   
  158.         //显示响应的页面,并且输出响应的内容  
  159.         return view('student.detail', [  
  160.             'student'=> $student  
  161.         ]);  
  162.     }  
  163.   
  164.     //学生删除方法,该方法没有响应的页面,只有操作成功或者失败后显示响应的信息  
  165.     public function delete($id){  
  166.         //根据id找到响应的数据  
  167.         $student = Student::find($id);  
  168.         //从数据库中删除数据。这里就是laravel厉害的地方了,直接一个delete就可以解决了。第一次写的时候,我都不敢相信就这样就可以删除。有时间的话一定要好好研究源代码  
  169.         if($student->delete()){  
  170.             //删除成功,跳转页面  
  171.             return redirect('student/index')->with('success', '删除成功-'.$id);  
  172.         }else{  
  173.             return redirect('student/index')->with('error', '删除失败'.$id);  
  174.         }  
  175.     }  
  176. }  

 

 

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

 

[php] view plain copy
 
  1. <?php  
  2. namespace App;  
  3.   
  4. use Illuminate\Database\Eloquent\Model;  
  5.   
  6. //该页面属于MVC中的Model,这里是student Model  
  7. class Student extends Model{  
  8.     //定义类常量,在数据库中储存10 20 30 来代替相应的 未知 男 女 可以节省数据库的压力。而且操作也简单  
  9.     const SEX_UN = 10;      //未知  
  10.     const SEX_BOY = 20;     //男  
  11.     const SEX_GRIL = 30;    //女  
  12.   
  13.     //数据库中响应的表名是 student  
  14.     protected $table = 'student';  
  15.   
  16.     //为了可以传参数的时候多参数的传参,我们自定义可以传递以下三个参数  
  17.     protected $fillable = ['name', 'age', 'sex'];  
  18.   
  19.     //默认使用时间戳功能,当我们在数据库中创建 create_at updated_at 字段的时候,laravel会自动帮我们生成响应的时间戳  
  20.     public $timestamps = true;  
  21.   
  22.     //禁止时间戳转换为字符串时间  
  23.     protected function getDateFormat(){  
  24.         return time();  
  25.     }  
  26.   
  27.     //select的时候可以避免时间转换成字符串时间  
  28.     protected function asDateTime($val){  
  29.         return $val;  
  30.     }  
  31.   
  32.     //创建一个sex()方法,用来判断该选项之前是否已经选定,如果选定,返回之前的。没有选定,则显示未知。  
  33.     //响应的name age 没有类似的方法是因为他们有 old()  
  34.     public function sex($ind = null){  
  35.         $arr = [  
  36.             self::SEX_UN => '未知',  
  37.             self::SEX_BOY => '男1',  
  38.             self::SEX_GRIL => '女',  
  39.         ];  
  40.   
  41.         if($ind !== null){  
  42.             return array_key_exists($ind, $arr)?$arr[$ind]:$arr[self::SEX_UN];  
  43.         }  
  44.         return $arr;  
  45.     }  
  46. }  


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

 

 

路由 routes.php 中的相关代码

 

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


另外推荐 天秤VS永恒 的课程 http://www.imooc.com/search/?words=laravel  如果你有更好的laravel自学课程,我非常希望你能留言告诉我。让咱们一起学习laravel。

转载自:http://blog.csdn.net/xiao_tommy/article/details/53262622

posted on 2017-12-26 15:55  飘渺的悠远  阅读(451)  评论(0)    收藏  举报