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服务器:

  1. 安装LAMP环境https://lamp.sh/autoinstall.html
  2. 用git将lavarel项目拉去到服务器上,地址推荐为/var/www/
  3. 赋予/var/www权限:
    命令:`chmod 777 var/www -R
  4. 进入Apache安装目录:/user/local/apache
    更改其conf/vhost目录下的default.conf文件,将DocumentRoot和Directory路径改为/var/www/lovelife/public
    更改其conf目录下的httpd.conf文件,将DocumentRoot和Directory路径改为/var/www/lovelife/public
  5. 重启Apache,/etc/init.d/mysqld restart