hongyukeji/ebestcms

eBestCMS Advanced Project Template


Keywords
hongyu, hongyukeji, hongyushop, ebestcms
License
MIT

Documentation

eBestCMS

鸿宇科技有限公司是一家以信息技术服务为主导、立足于高科技领域的前沿,专业致力于网络Web开发及应用的高科技企业。本着“质量第一、诚信为本”的朴素经营理念,以务实创新的精神不断进行开拓实践和探索进取。

Latest Stable Version Total Downloads

安装与更新

  • 运营版:

    composer create-project hongyukeji/ebestcms ebestcms
    
  • 开发版:

    composer create-project hongyukeji/ebestcms ebestcms dev-master
    
  • 更新:

    composer update
    

运行环境

  • PHP版本:>=5.6.4
  • MySQL版本:>=5.5.0

系统开发

  • 公司名称:鸿宇科技有限公司
  • 公司官网:www.hongyuvip.com
  • 系统框架:Laravel5.5
  • 核心技术:PHP7、Html5、Css3、JavaScript ES6、jQuery、Ajax、MySQL、VueJS、Bootstrap
  • 开发工具:PhpStorm、Navicat for MySQL、PhotoShop CS6、
  • 开发团队:Shadow(项目总监)、Spider(代码审计)、Free(数据库建模)、Wind(PHP后端开发)、Flower(前端UI设计)、Boy(Html5前端开发)
  • 项目支持:感谢所有支持鸿宇团队的朋友!

系统维护

常用命令

php artisan migrate:refresh --seed

php artisan migrate     // 迁移所有文件
php artisan migrate:refresh --seed      // 回滚再重新运行所有迁移
php artisan make:controller Admin/DemoController  // 创建 控制器
php artisan make:model Models/Demo      // 创建 模型
php artisan make:model Models/Demo -m   // 生成模型同时生成迁移文件
php artisan make:middleware Demo    // 创建 中间件
php artisan make:policy DemoPolicy  // 创建 策略类
php artisan make:seeder DemosTableSeeder     // 创建 填充文件
php artisan tinker      // tinker
php artisan make:auth       // 创建 Auth 认证
composer dump-autoload      // composer 重新加载
php artisan config:clear    // 仅清理配置文件
php artisan config:cache    // 清理并重新生成配置文件

PHP Artisan

  • artisan 创建 控制器
php artisan make:controller Admin/DemoController
  • artisan 创建 模型
php artisan make:model Article
  • 生成模型同时生成迁移文件
php artisan make:model Article -m
  • artisan 创建 中间件
php artisan make:middleware Articles
  • tinker
php artisan tinker
factory(App\Article::class,10)->make(); // 只显示不保存
factory(App\Article::class,10)->create(); // 生成演示数据并插入数据库

migrate 数据库文件迁移

  • 迁移所有文件
php artisan migrate
  • 迁移文件并添加填充文件
php artisan migrate --seed
  • 回滚再重新运行所有迁移
php artisan migrate:refresh --seed
  • 新建一个article表的迁移文件
php artisan make:migration create_articles_table --create=articles
  • 创建一个填充文件
php artisan make:seeder ArticlesTableSeeder
  • 执行单个填充文件
php artisan db:seed --class=ArticlesTableSeeder
  • 批量执行填充文件(在 /database/seeds/DatabaseSeeder.php 添加 $this->call(ArticlesTableSeeder::class);)
php artisan db:seed     

Auth 认证

  • 创建 auth ()
php artisan make:auth
  • Laravel 5.4 migrate时报错: 1071 Specified key was too long

    /app/Providers/AppServiceProvider.php

public function boot()
{
   \Illuminate\Support\Facades\Schema::defaultStringLength(191);
}

常用

  • composer 重新加载
composer dump-autoload
  • artisan 清理配置文件缓存
php artisan config:cache    // 清理并重新生成配置文件
php artisan config:clear    // 仅清理配置文件
  • 模板中限制内容
{{ str_limit($article->content, 300, '...') }}
  • 不转义 输出格式化去掉html标签
{!! $content !!}
$dt = Carbon::create(1975, 12, 25, 14, 15, 16);

var_dump($dt->toDateTimeString() == $dt);          // bool(true) => uses __toString()
echo $dt->toDateString();                          // 1975-12-25
echo $dt->toFormattedDateString();                 // Dec 25, 1975
echo $dt->toTimeString();                          // 14:15:16
echo $dt->toDateTimeString();                      // 1975-12-25 14:15:16
echo $dt->toDayDateTimeString();                   // Thu, Dec 25, 1975 2:15 PM

// ... of course format() is still available
echo $dt->format('l jS \\of F Y h:i:s A');         // Thursday 25th of December 1975 02:15:16 PM

MySQL

  • 规范
articles    // 表名 加 s 复数形式
user_id     // 外键 名词 加 下划线 id
created_at/updated_at   // 时间字段名规范
$article->created_at->toDateString()    // 2017-08-08

Form表单

<!-- 所有的错误提示 -->
@if (count($errors))
    {{-- 显示第一条错误信息 --}}
    {{--<div class="alert alert-danger">
        <ul>
            <li>{{ $errors->first() }}</li>
        </ul>
    </div>--}}

    {{-- 显示所有错误信息 --}}
    <div class="alert alert-danger">
        <ul>
            @foreach($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
{{--<form class="form-horizontal" method="post" action="{{ url('student/save') }}">--}}
<form class="form-horizontal" method="post" action="">
    {{--<input type="hidden" name="_token" value="{{ csrf_token() }}"/>--}}
    {{ csrf_field() }}
    <div class="form-group">
        <label for="name" class="col-sm-2 control-label">姓名</label>

        <div class="col-sm-5">
            <input type="text" name="Student[name]"
                   value="{{ old('Student')['name'] ? old('Student')['name'] : $student->name }}" class="form-control"
                   id="name"
                   placeholder="请输入学生姓名">
        </div>
        <div class="col-sm-5">
            <p class="form-control-static text-danger">{{ $errors->first('Student.name') }}</p>
        </div>
    </div>
    <div class="form-group">
        <label for="age" class="col-sm-2 control-label">年龄</label>

        <div class="col-sm-5">
            <input type="text" name="Student[age]"
                   value="{{ old('Student')['age'] ? old('Student')['age'] : $student->age }}" class="form-control"
                   id="age"
                   placeholder="请输入学生年龄">
        </div>
        <div class="col-sm-5">
            <p class="form-control-static text-danger">{{ $errors->first('Student.age') }}</p>
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-2 control-label">性别</label>

        <div class="col-sm-5">
            @foreach($student->getSex() as $ind=>$val)
                <label class="radio-inline">
                    <input type="radio" name="Student[sex]"
                           {{ isset($student->sex) && $student->sex == $ind ? 'checked' : '' }} value="{{ $ind }}"> {{ $val }}
                </label>
            @endforeach
        </div>
        <div class="col-sm-5">
            <p class="form-control-static text-danger">{{ $errors->first('Student.sex') }}</p>
        </div>
    </div>
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-primary">提交</button>
        </div>
    </div>
</form>

发送邮件

  • /.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mxhichina.com
MAIL_PORT=465
MAIL_USERNAME=admin@hongyuvip.com
MAIL_PASSWORD=
MAIL_ENCRYPTION=ssl
  • Controller
public function mail()
{
    // 发送邮件 - 文本模式
    $name = 'Shadow';
    Mail::raw('邮件内容', function ($message) use ($name) {
        $message->from('admin@hongyuvip.com', '鸿宇科技' . $name);
        $message->subject('邮件主题');
        $message->to('1527200768@qq.com');
    });
    
    // 发送邮件 - Html模式
    Mail::send('mail.main', ['name' => '鸿宇科技', 'token' => rand(000000,999999)], function ($message){
        $message->from('admin@hongyuvip.com', '鸿宇科技');
        $message->subject('邮件主题');
        $message->to('1527200768@qq.com');
    });
}

伪静态

  • Apache Laravel包含一个文件,用于在路径中没有前端控制器的情况下提供URL 。 在为Apache服务Laravel之前,请务必启用该模块,以便服务器将该文件保存。 public/.htaccess index.php mod_rewrite .htaccess
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
  • Nginx 如果您使用Nginx,您的站点vhost.conf配置中的以下指令将会将所有请求都引导到前台控制器:index.php
location / {
    try_files $uri $uri/ /index.php?$query_string;
}