欢迎光临
感谢一路有你

laravel | 系统学习笔记一

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 
laravel中文网
	https://laravel-china.org/

支持:
	队列
	搜索
	数据库迁移
	定时脚本

数据填充包
	https://github.com/fzaninotto/Faker

laravel思想
	服务容器
	服务提供者

安装环境要求
	PHP>=5.6.4
	扩展
		openssl php extension
		pdo PHP extension
		mbstring PHP extension
		tokenizer php extension
		xml PHP extension

	查看PHP版本 php -v
	查看扩展 php -m
	查看mysql是否开启  mysql -h127.0.0.1 -p3306 -uroot -proot

PHPstorm快捷键
	定位
		查看代码中某个方法是如何定义的 common+鼠标左键
		回转到刚才定位  common+option+键盘左键
	快速文件定位
		common+shift+o  输入框中输入路径

	复制当行粘贴到下一行 common+d

sequel pro  mac数据库管理工具




composer安装laravel
	composer create-project laravel/laravel mylaravel "5.4.*"


laravel 的启动

	1. web服务器配置 
		https://laravel-china.org/docs/laravel/5.4/installation/1216
	2. php artisan serve  
		//http://127.0.0.1:8000>
		php artisan help serve // 查看帮助
		php 

文件夹
	app 具体的逻辑 mc
	config 配置
	database 数据库文件
	public 静态文件
	resources  模板文件 v
	routes 路由
	storage 日志/缓存 (要提供读写权限)
	test  测试
	vendor 第三方包


.env  修改数据库
判断数据库是否链接  php artisan migrate:install  (数据迁移时可使用的)


路由
	1. HTTP方法

		Route::get('/', function () {
		    return view('welcome');
		});
		Route::get('/','[控制器]@[方法]');
		Route::get('/posts','\App\Http\Controller\PostController@index');
		
		支持http1.1
			get 获取
			post 创建
			put 更新
			patch 批量更新
			delete 删除
			options 查询该资源支持的方法

		------------
		any  只要url符合,什么请求方式无所谓
		Route::any('/posts','\App\Http\Controller\PostController@index');

		match  支持某个路由
		Route::match(['get','post'],'/posts','\App\Http\Controller\PostController@index');

		//表单只支持get post
		<form action="/posts" method="POST"></form>

		如果想使用put提交
		Route::put('/posts','\App\Http\Controller\PostController@index');

		<form action="/posts" method="POST">
			<input type="hidden" name="_method" value="PUT" >
			也可以使用==> {{method_field("PUT")}}
		</form>


	
	2.路由参数的绑定
		Route::get('/posts/{id}','\App\Http\Controller\PostController@index');
		function index($id)
		{
			$id == 10;
		}
	3.路由分组
		Route::group(['prefix'=>'posts'],function(){
			Route::get('/','\App\Http\Controller\PostController@index');
			Route::put('/{id}','\App\Http\Controller\PostController@index');
			Route::get('/add','\App\Http\Controller\PostController@index');
		})
	4.绑定模型
		Route::get('/post/{post}','\App\Http\Controller\PostController@index');
		function show(\App\Post $post){
			//传递进来的是模型
			//post=>表:posts =>主键: id  (laravel默认的)
		}

	//文章列表
	Route::get('/posts','\App\Http\Controllers\PostController@index');
	//文章详情
	Route::get('/posts/{post}','\App\Http\Controllers\PostController@show');
	//创建文章
	Route::get('/posts/create','\App\Http\Controllers\PostController@create');
	Route::post('/posts','\App\Http\Controllers\PostController@store');
	//编辑文章
	Route::get('/posts/{post}/edit','\App\Http\Controllers\PostController@edit');
	Route::put('/posts/{post}','\App\Http\Controllers\PostController@update');
	//删除
	Route::get('/posts/delete','\App\Http\Controllers\PostController@delete');

创建controller
	php artisan make:controller PostController
	//  \app\Http\Controllers\PostController.php
创建路由

模板渲染
	return view("post/index");

blade模板
	{{}}  @if  @foreach
	继承模型 extends/ section/ yield/ content
	引入视图  include

	-----------------------
	return view("post/index",["title"=>'this is title','isShow'=>true]);
	也可以写成:return view("post/index",compact('list'));

	{{$title}} 
	@if($isShow==true)
			.........
	@endif
	@foreach($list as $k=>$vo)
			.........
	@endforeach



	---------
	模板:
	新建文件\resources\views\layout\main.blade.php
		@yield("content")  //非共用部分

	继承:
	@extends("layout.main")
	@secton("content")
		<div>....</div>
	@endsecton	

	-----------------------
使用migrate创建数据表
	表名posts(推荐后面加上s)
	外键user_id(推荐)
	时间created_at/updated_at/deleted_at(推荐)

	2018_12_14_020115_create_posts_table.php
	1. php artisan make:migration create_posts_table

	2. 在生成的文件中写入代码
		public function up()
		{
		    Schema::create('posts', function (Blueprint $table) {
		        $table->increments("id");
		        $table->string('title',100)->default("");
		        $table->text("content");
		        $table->integer("user_id")->default(0);
		        $table->timestamps();
		    });
		}
	3.php artisan migrate
	4.按照时间依次未执行的脚本
	5.完成  id/title/content/user_id/create_at/updated_at

ORM模型的创建
	php artisan make:model Post  (驼峰形式)
	生成\app\Post.php  默认对应的表是posts
		class Post extends Model
		{
		    protected $table = "zzlll";//定义表
		}

	tinker测试
		php artisan tinker //打开tinker
		增加操作
			>>> $post = new \App\Post();//new
			=> App\Post {#701}
			>>> $post->title = "post1";//设置标题
			=> "post1"
			>>> $post->content = 'xxxxxxxxxxx';//设置内容
			=> "xxxxxxxxxxx"
			>>> $post->save();//保存
			=> true
		查询
			>>> \App\Post::find(2);
			=> null
			>>> \App\Post::find(1);//find只能用在主键上
			=> App\Post {#715
			     id: 1,
			     title: "post1",
			     content: "xxxxxxxxxxx",
			     user_id: 0,
			     created_at: "2018-12-14 02:27:54",
			     updated_at: "2018-12-14 02:27:54",
			   }
			>>>

			>>> \App\Post::where("title",'pos1')->get();//按条件查找

		修改
			>>> $post = \App\Post::find(1);
			=> App\Post {#715
			     id: 1,
			     title: "post1",
			     content: "xxxxxxxxxxx",
			     user_id: 0,
			     created_at: "2018-12-14 02:27:54",
			     updated_at: "2018-12-14 02:27:54",
			   }
			>>> $post->title = "p2"
			=> "p2"
			>>> $post->save();
			=> true

		删除 
			>>> $post = \App\Post::find(2);
			=> App\Post {#716
			     id: 2,
			     title: "222",
			     content: "",
			     user_id: 0,
			     created_at: null,
			     updated_at: null,
			   }
			>>> $post->delete();
			=> true


	使用model
		模型查找
			use \App\Post;
			$posts = Post::orderBy('creates_at','desc');
			return view("post/index",compact('posts'));

			@foreach($posts as $k=>$post)
					{{$post->title}}//传递过来的是对象不是数组
					{{$post->created_at->toFormattedDateString()}}//时间
			@endforeach


快速数据填充(使用faker填充)
	打开databaes/factories/ModelFactory.php
		创建工厂
			$factory->define(App\Post::class, function (Faker\Generator $faker){
				return [
					'title'=>$faker->sentence(6),
					'content'=>$faker->paragraph(5),
				];
			});
		执行tinker
			$ php artisan tinker
			>>> factory(App\Post::class,10)->make();//打印到页面上
			>>> factory(App\Post::class,10)->create();//插入到数据库


分页

	$posts = Post::orderBy('creates_at','desc')->paginate(6);
	{{$posts->links()}}
字符的截断
	{{str_limit($post->content,100,'...')}}


模型绑定 (路由传递模型)
	详情页面
	<a href="/posts/{{$post->id}}" >//点击进入
	Route::get('/post/{post}','\App\Http\Controller\PostController@show');
	public function show(Post $post){
		return view("post/show",compact('post'));
	}


设置时区:config\app.php      
	'timezone' => 'Asia/Shanghai',


dd(request());


CSRF保护
	提交表单时不成功
	<input type="hidden" name="_token" value="{{csrf_token()}}">
	==>  {{csrf_field()}}

保存到数据库
	$data = ['title'=>request('title'),'content'=>request('content')]; 
	

	或者
	post.php(model)
    	protected $guarded = [];//不可注入的字段
	===>$data =Post::create(request(['title','content'])) 


重定义
	return redirect('/posts');

验证器
	https://www.wangmingchang.com/3454.html 14
	错误提示的本地化 
		1.放入语言包\resources\lang\zh
		2.选择语言包config/app.php    'locale' => 'cn',
表单提交三步骤
	1.验证 2.逻辑 3.渲染


HTML标签转化{!! HTML内容 !!}

图片上传
	<meta name="csrf-token" content="{{csrf_token()}}">
	js中token
		'X-CSRF-TOKEN':$('meta[name="csrf-token"]').attr('content')

	上传图片路径\storage\app\public
	实际能访问的只有public ,需要如下修改
		https://laravel-china.org/docs/laravel/5.4/filesystem/1251
		1.config/filesystems.php 
    		'default' => env('FILESYSTEM_DRIVER', 'public'),
    	2. php artisan storage:link

    public function upimg(REquest $request)
    {
    	$path = $request = file('wangEditorFile')->storePublicly(md5(time()));
    	return asset('storage/'.path);//到storage查找文件
    }


编辑
	$post->post = request("title");
	$post->content = request("content");
	$post->save();

删除
	$post->delete();

用户权限认证


 

赞(0) 打赏
未经允许不得转载:王明昌博客 » laravel | 系统学习笔记一
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏