初学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。
转载自:http://blog.csdn.net/xiao_tommy/article/details/53262622