Laravel部署
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
查看4道真题和解析