title: Laravel
tags:
安装 WampServer
运行mysql,首先运行WampServer,然后在命令行输入
mysql -uroot -p
运行PHP自带的服务器时,
php -S localhost:8888
其默认的入口文件时index.php
PHP使用PDO连接数据库
try{ $pdo=new PDO('mysql:host=127.0.0.1;dbname=mytry','root',''); }catch(PDOException $e){ die('Could not connect to database'); }
完整demo
//index.php <?php try{ $pdo=new PDO('mysql:host=127.0.0.1;dbname=mytry','root',''); }catch(PDOException $e){ die('Error:'.$e->getMessage()); } $statement=$pdo->prepare('select * from todos'); $statement->execute(); $tasks = $statement->fetchAll(PDO::FETCH_OBJ); require "index.view.php"; //index.view.php <!DOCTYPE html> <html> <head> <title>PHP</title> </head> <body> <ul> <?php foreach ($tasks as $task) : ?> <?php if($task->completed) : ?> <li> <del><?= $task->description ?></del> </li> <?php else : ?> <li> <?= $task->description ?> </li> <?php endif ; ?> <?php endforeach ; ?> </ul> </body> </html>
打开Warmserver
用localhost:8080
运行mysql图形化软件,打开
localhost:8080/phpmyadmin
学习路径
PHP基础教程
从零部署一个网站
安装laravel
在目标目录下:如2019download/Laravel中执行Composer命令
composer create-project laravel/laravel blog
上面的命令就是使用Composer的create-project命令创建一个新的项目,这个项目的名称就是blog,也就是我们会在Code/目录之下得到一个blog/文件夹,至于laravel/laravel也就是Laravel提供的包名称,如果你想知道Composer究竟有哪些包,你可以直接到这里来看看:
https://packagist.org/explore/
进入到项目的对应目录cd blog/,开启PHP服务器:
php -S localhost:8888 -t public
然后访问localhost:8888就可以看到Laravel的首页了:
php快捷键
设置中心:Ctrl+Shift+A
选择文件:Ctrl+E
查看文件中的类:Ctrl+F12
查找文件、类或方法等:Shift+Shift
快速生成代码:Alt+fn+Insert
快速创建文件:Alt+fn+home定位所需创建文件的目录,Alt+fn+Insert创建文件
代码重构:Alt+Ctrl+Shift+T
多点编辑(逐个选):Alt+J
多点编辑(全选):Alt+C
Laravel课程
Laravel5.5基础
1 目录结构讲解
routes:路由
resources:(blade模板引擎)视图定义存放在resources/views/中
2 目录设计原则
MVC原则
M-Model 模型
database目录当中
V-View 视图
resources目录中:assets放置未被处理的js,sass文件,lang是语言先关的字符串定义,views是视图
C-Controller 逻辑控制器
项目的所有业务逻辑,映射为的代码逻辑在app和routes目录
app业务处理逻辑
routes访问路由逻辑
工程项目便利性原则
routes文件经常修改,第一层更易定位
其他目录:
config目录放置配置相关文件
public目录是大家都能访问到的开放性目录
storage目录保存大量的缓存文件
bootstrap目录用于加速网站
vendor目录是不回去触碰它的目录
3 定义不同类型的路由
Route::get('book', function () { return '获取一本书'; }); Route::post('book', function () { return 'post一本书'; }); Route::put('book', function () { return '新增一本书'; }); Route::delete('book', function () { return '删除一本书'; }); Route::patch('book', function () { return '更新一本书'; });
4 路由的必选参数和可选参数
Route::get('book/{id}', function ($id) { return '获取一本书,他的id是'.$id; })->where('id','[0-9]+'); Route::get('books/{name?}', function ($name='汉家故里') { return '获取一本书,书名是'.$name; })->where('name','[a-zA-Z]+');
5 路由检查和路由群组
路由检查命令
php artisan route:list
路由群组
Route::prefix('user')->group(function (){ Route::get('',function (){ return '用户主页'; }); Route::get('email',function (){ return '用户邮箱'; }) ; Route::get('avatar',function (){ return '用户头像'; }); });
6 基础控制器创建
命令行
php artisan make:controller SiteController
web.php
Route::get('/','SiteController@index'); Route::get('/about', 'SiteController@about');
SiteController.php
class SiteController extends Controller { // public function index(){ return view('welcome'); } public function about(){ return view('about'); } }
7 资源控制器resource controller
命令:
php artisan make:controller UserController --resource
8 自带的用户脚手架系统
命令:
php artisan migrate
创建数据库的数据表
命令:
php artisan make:auth
创建用户系统
9 数据库版本控制数据迁移工具migration
版本回滚命令:
php artisan migrate:rollback --step=1
删除所有数据表:
php artisan migrate:reset
重新生成所有数据表:
php artisan migrate:refresh
创建一个migration文件:
php artisan make:migration create_todolist_table --create=todolist
修改表结构:(注意不可直接在原表migration文件中更改)
php artisan make:migration add_master_into_todolist_table --table=todolist
10 Seeder方式向数据库填充数据
Seeder向数据库播种
命令:创建一个seeder
php artisan make:seeder UsersTableSeeder
命令:运行
php artisan db:seed
注:
所有表的创建和数据的写入:
php artisan migrate:refresh --seed
11 factory工厂生成批量测试数据
命令:
php artisan tinker namespace App; factory(User::class,500)->create()
若创建新的factory类
php artisan make:factory PostsFactory -m Post
12 Eloquent ORM 用面向对象的方式操作数据库
O-Object 对象
R-Relational关系
M-Mapping映射
Post Model 对应 posts数据表
对象与数据库数据之间的映射:
命令:
php artisan make:model Post -m
CRUD
C:Create 增加
$user =new User $user->name='coding10' $user->email='coding10@coding10.com' $user->password=bcrypt('000000') $user->role='others' $user->save()
R:Retrieve 读取查询
User::where('role','=','wife')->get()
U:Update 更新
$user->name='coding100' $user->save()
D:Delete 删除
$user->delete() User::where('role','others')->delete()//批量删除
对象的关系反应数据项之间的关系:
返回id为2的所有文章
$user=User::find(2) $user2->posts
13 简单博客系统搭建
网页链接中用有意义的命名代替id
public function getRouteKeyName(){ return 'name'; }
报错处理
1071 Specified key was too long
【laravel5.6】 Illuminate\Database\QueryException : SQLSTATE42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
参考博客
在进行数据迁移时候报错,特殊字段太长报错
解决方法:
在文件路径: /app/providers/AppServiceProvider.php,添加下述语句即可
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Schema;//添加 class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // Schema::defaultStringLength(191);//添加 } /** * Register any application services. * * @return void */ public function register() { // } }
Access denied for user 'homestead'@'localhost'
参考博客
注意:mysql中root用户默认为空,输入NULL
然后清理缓存重启服务
php artisan cache:clear php artisan config:clear php artisan serve
Migration: Cannot add foreign key constraint in laravel
参考网站
在本地migrate成功,但在服务器上失败,mysql版本一致,不懂呜呜呜
//原: public function up() { Schema::create('todolists', function (Blueprint $table) { $table->bigIncrements('id'); ... $table->unsignedInteger('author_id'); $table->foreign('author_id')->references('id')->on('users'); }); } //修改: public function up() { Schema::create('todolists', function (Blueprint $table) { $table->bigIncrements('id'); ... $table->bigInteger('author_id')->unsigned(); $table->foreign('author_id')->references('id')->on('users'); }); }
网站开发流程
集成markdown编辑器
https://geixue.com/course/develop-a-forum-using-laravel-5/episodes/22
部署Lavarel到阿里云CentOs服务器:
- 安装LAMP环境https://lamp.sh/autoinstall.html
- 用git将lavarel项目拉去到服务器上,地址推荐为/var/www/
- 赋予/var/www权限:
命令:`chmod 777 var/www -R - 进入Apache安装目录:/user/local/apache
更改其conf/vhost目录下的default.conf文件,将DocumentRoot和Directory路径改为/var/www/lovelife/public
更改其conf目录下的httpd.conf文件,将DocumentRoot和Directory路径改为/var/www/lovelife/public - 重启Apache,/etc/init.d/mysqld restart