laravel整理筆記

搭建lamp環(huán)境

安裝ubuntu14.04 LTS版本

搭建lamp環(huán)境:

切換到root:

sudo su

更新源:

apt-get update

安裝apache2:

apt-get install apache2

安裝php5.5.9:

apt-get install php5

安裝mysql:

apt-get install mysql-server mysql-client

安裝php對myslq的擴展:

apt-get install php5-mysql

安裝laravel需要的加密算法庫:

apt-get install mcrypt

安裝php加密庫:

apt-get install php5-mcrypt

php5的這個加密擴展需要手動修改配置文件才可以使用:

cd /etc/php5/mods-available/   #這個目錄是php已經(jīng)下載的擴展

cd /etc/php5/apache2/conf.d/   #這個目錄是php已經(jīng)加載的擴展(都是軟連接)

我們只需要建立個軟連接就可以了:

ln -s /etc/php5/mods-available/mcrypt.ini ./

ls  #查看文件,軟連接建立成功,擴展就可以用了

重啟apache:

apachectl restart

建立phpinfo文件:

cd /var/www/html/  #這是apache的網(wǎng)站根目錄

vim info.php

    <?php
        phpinfo();
    ?>

查看服務(wù)器IP

ifconfig  (假設(shè)為192.168.1.50)

瀏覽器訪問192.168.1.50/info.php

可以看到mcrypt已經(jīng)加載進去了

安裝一些常用的工具:

apt-get install wget      #下載工具 

apt-get install curl  #模擬瀏覽器

apt-get install openssl 

連接遠程服務(wù)器

mac電腦用ssh連接:

ssh laravel@192.168.1.50

windowx電腦使用xshell,或者putty連接

composer的安裝

下載composer.phar包:
下載地址

上傳composer.phar包到服務(wù)器:

使用上傳工具:

FileZilla

或者mac 終端使用 scp

windows下使用xhsell,  使用rz命令

添加可執(zhí)行權(quán)限:

chmod +x ./composer.phar

每次都要在這個使用很麻煩,添加成全局的就方便了:

 mv composer.phar /bin/composer

驗證:

composer -v

安裝laravel

全局安裝(適用于一個服務(wù)器多個laravel項目):

composer global require "laravel/installer"

配置全局環(huán)境變量:

cd

vim .profile

最后面寫入:

export PATH=$PATH:/root/.config/composer/vendor/bin/

生成laravel項目:

laravel new blog

局部安裝(適用于服務(wù)器只有一個laravel項目):

composer create-project --prefer-dist laravel/laravel blog

ps:注意虛擬機內(nèi)存一定要大于1G,不然會報內(nèi)存不足的錯誤

修改文件權(quán)限:

cd blog

chmod -R 777 storage

本地域名解析和apache虛擬主機配置

修改hosts文件:

mac 在 /etc/hosts

windows 在C:\Windows\System32\drivers\etc\hosts

加入:

192.168.1.50 laravel.demo

配置虛擬主機:

cd /etc/apache2/sites-available

cp 000-default.conf laravel.demo.conf

vim laravel.demo

打開服務(wù)器名字配置:

ServerName laravel.demo

建立軟連接:

ln -s /etc/apache2/sites-available/laravel.demo.conf ../sites-enabled/

重啟服務(wù)就可以了:

apachectl restart

git倉庫建立與git服務(wù)器的搭建

安裝git:

apt-get install git

設(shè)置你的倉庫用戶名:

git config --global user.name 'lwt'

git config --global user.email '13521760670@163.com'

初始化git倉庫:

cd /var/www/demo

git init

搭建git服務(wù)器:

添加用戶:
adduser git

克隆裸倉庫:
git clone --bare demo demo.git

移動位置:
mv demo.git/ /home/git/

修改權(quán)限:
chown -R git:git demo.git/

另一個服務(wù)器操作:

生成密鑰對(生成位置在當(dāng)前用戶的家目錄的.ssh文件里)
ssh-keygen -t rsa

上傳公鑰到git服務(wù)器,這樣可以免密碼克隆和提交:
cd
cd .ssh
找到 
id_rsa.pub
想辦法把這個文件里面的內(nèi)容弄到git服務(wù)器,git用戶家目錄里面的
.ssh文件夾里面的authorized_keys里面(沒有就手動創(chuàng)建,可能會有權(quán)限的問題)

這樣做完之后,這個服務(wù)器就可以免密碼克隆git服務(wù)器的內(nèi)容了:
git clone git@git服務(wù)器IP:test.git(這個空倉庫是在git服務(wù)器的git家目錄里面的)

apache2重定向(隱藏index文件)

加載重定向模塊:

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/

修改配置文件:

vim /etc/apache2/apache2.conf

找到:
Directory /var/www/
把 AllowOverride Node
改為:
AllowOverride all

保存退出,重啟apache:

:wq
apachectl restart

安裝laravel調(diào)試工具

安裝:

composer require barryvdh/laravel-debugbar

全格式打印:

dd();

如果沒有新的文件,git快捷提交:

git commit -a -m "show"

設(shè)置服務(wù)提供者:

vi /var/www/demo/config/app.php

找到:
Application Service Providers...

在里面寫入:
Barryvdh\Debugbar\ServiceProvider::class,

起個別名,找到:
Class Aliases
寫入:
'Debugbar' => Barryvdh\Debugbar\Facade::class,

生成配置文件:
cd /var/www/demo/
php artisan vendor:publish

手動輸出錯誤日志:
php文件中寫:
/Debugbar::error('Something is definitely goding wrong');

環(huán)境配置和數(shù)據(jù)庫連接

連接:

1. 安裝Navicat Premium

2. 然后新建一個mysql連接

3. 然后配置ssh

4. 輸入遠程服務(wù)器的ip和用戶名密碼

5. 然后配置常規(guī)

6. 這里面是以ssh的遠程服務(wù)器為基礎(chǔ)的,所以ip地址就寫localhost(代表遠程服務(wù)器)

7. 輸入數(shù)據(jù)庫的用戶名和密碼

8. 連接成功

配置:

配置文件都在根目錄的config文件夾下,找到database.php

可以看到里面的mysql配置,使用了一個env函數(shù)

這個函數(shù)可以動態(tài)加載根目錄下得.env里面的全局變量

所以我們只需要修改.env里面的配置就可以了

數(shù)據(jù)遷移

生成信息記錄表:

根目錄下:
php artisan migrate

在根目錄下 database/migrations 里面存放了動態(tài)建表文件

利用laravel命令建立表,有利于數(shù)據(jù)庫遷移:

根目錄下:
php artisan make:migration crteate_news_table

會在根目錄下的database/migrations文件里夾里生成對應(yīng)的文件,可以在這個文件里定義表結(jié)構(gòu)

靜態(tài)資源管理elixir工具

安裝nodejs:

wget https://nodejs.org/dist/v4.4.4/node-v4.4.4.tar.gz

tar -zxvf node-v4.4.4.tar.gz

cd node-v4.4.4

./configure

make && make install

安裝gulp:

npm install --global gulp

npm install

配置文件在:

根目錄下:
gulpfile.js

測試合成文件:

合并多個css文件:
vi gulpfile.js

注釋:
min.sass('app.scss');
添加:
mix.styles(['a.css','b.css'],'public/assets/css');
注意:a.css,b.css都在項目根目錄下resources下assets的css目錄(沒有自己建立個)
注意:合成輸出的目錄在public/assets/css下(沒有自己建立)

編譯合成:
gulp

查看效果:
cat public/assets/css/all.css

測試編譯sass:

vim resources/assets/sass/app.scss
打開文件中的注釋,導(dǎo)入bootstrap

測試驅(qū)動開發(fā)

項目根目錄下有一個tests文件夾,在這個里面寫測試用例:

cd tests

其中TestCase.php是系統(tǒng)封裝的測試,我們自己寫的驅(qū)動都要集成這個類

ExampleTest.php就是一個列子

我們自己寫的測試用例,命名一定要按照規(guī)范,即xxxTest.php

測試:

項目根目錄下:
./vendor/bin/phpunit 

顯示綠色的就是測試通過,紅色的的就是沒有測試通過

ps:我們在實際的項目開發(fā)中,先根據(jù)用戶需求,寫出測試用例,執(zhí)行測試,肯定都是
紅色的呀,然后我們就一個模塊一個模塊的去完成,讓紅色慢慢的都變綠,項目也就做完啦

laravel項目生命周期

laravel運行流程

1.public/index.php

項目入口文件

2.bootstrap/cache

    框架的啟動文件夾
    cache是項目編譯后的所有需要的類和資源

contract容器,幫助我們創(chuàng)建我們需要的對象

3.配置文件

provider:服務(wù)提供者
命名空間加類,寫在這里面的類,系統(tǒng)會自動幫我們創(chuàng)建對象

aliases:別名
給對象起個別名,方便我們使用

app/console:命令行相關(guān)

kenel.php 命令行要使用的東西在這里

app/events:注冊事件

app/http:網(wǎng)頁請求走這里

app/jobs:消息

  1. 加載app/http/內(nèi)核 kenel.php

    先走里面的中間件,中間件分全局中間件,和路由中間件
    

app/http/route路由文件,是整個web項目最開始的地方了

模板使用

路由文件位置:

app/Http/routes.php

加載模板

模板位置在:

resources/views/

模板名字:
name.blade.php

加載模板用:
return view('name');

加載views/dir/下的模板:
return view('dir.name');

模板包含

在要頁面中這樣寫:

@include('inc.name')

模板繼承

在要繼承的頁面中這樣寫:

@extends('layout.app')

我們只繼承那些不變的內(nèi)容,動態(tài)的內(nèi)容我們要留空,在被繼承的模板文件中用這個占位:

@yield('content')
在繼承它的頁面中去實現(xiàn)這個占位的內(nèi)容

接著在繼承頁面中這樣寫:

    @section('content')
        要實現(xiàn)的代碼內(nèi)容...
    @endsection

控制器與resfulApi的使用

控制器方法約定(resfulApi):

GET index  列表
GET create 創(chuàng)建
POST index 添加一個
GET id 查看
GET edit 修改

創(chuàng)建控制器:

項目目錄中使用命令:

php artisan make:controller HomeController --resource
 
會在app/Http/Controller/下面生成對應(yīng)的控制器

路由設(shè)置

在路由文件中配置:

基本路由:

Route::get('/','HomeController@index');

resful路由:

Route::resource('/home/','HomeController');
Route::resource('/home/create','HomeController');
Route::resource('/home/edit','HomeController');

注意:頂級目錄好像不支持get方式

對控制器的控制:

生效的方法:

Route::resource('/','HomeController',['only'=>['index','create']]);

不生效的方法設(shè)置:

Route::resource('/','HomeController',['except'=>['index','create']]);

服務(wù)容器和工廠模式

方便擴展的核心架構(gòu)就是容器: Service Container

index入口文件中,包含了核心框架應(yīng)用程序?qū)ο?

$app = require_once __DIR__.'/../bootstrap/app.php';

app.php是一個Application對象:

$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')

);

Application繼承Container對象:

class Application extends Container implements ApplicationContract, HttpKernelInterface

Container就是一個容器對象,利用各種機制來幫助我們創(chuàng)建對象

Application對象給我們一個這樣的方法:

$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,  //訪問這個類名
App\Exceptions\Handler::class                          //放入這個類
);

在服務(wù)提供者中,我們可以方便的注冊類或接口:

$this->app->bind('A', function ($app) {
return new HelpSpot\API($app['HttpClient']);  //返回一個對象或者類名稱 new \App\User();
});
$u->$this->app->make('A');

在app.php文件中綁定:

//相當(dāng)于給這個類做一個標(biāo)記,名字是A
$app->bind('A', function ($app) {   
return new HelpSpot\API($app['HttpClient']);  //返回一個對象或者類名稱 new \App\User();
});
//這里通過標(biāo)記,告訴Application工廠給我生產(chǎn)一個對象:
$u->$this->app->make('A');

那么如果是已經(jīng)new好的對象我們怎么放到容器中進行統(tǒng)一管理呢?

$u = new User();
$this->app-instance('u',$u);

優(yōu)點:如果我們這個類是需要替換成其他的類的話,我們不用做太多的改動,只需要修改個返回的類的就行了,標(biāo)記在其他地方都是通用的

根據(jù)不同需求生產(chǎn)不同的對象

單例模式:

//這樣綁定
$app->singleton('A', function ($app) {   
    return new HelpSpot\API($app['HttpClient']);  //返回一個對象或者類名稱 new \App\User();
});
//這樣生成
$this->app->make('A');
簡介寫法:
$this->app['A'];

還可以把我們實例化好的對象放到APP里面統(tǒng)一管理:

$fooBar = new FooBar(new SomethingElse);
$this->app->instance('FooBar', $fooBar);

依賴注入和ioc控制反轉(zhuǎn)

控制反轉(zhuǎn)就是在我們需要一個對象的時候,根據(jù)參數(shù)的類型,把我們需要的函數(shù)注冊進來,比如:

class Tb{
    private $ta;
    public function __constauct(\App\Ta $a){
        $this->ta = $a;
    }
}
說明:在我們需要使用Tb這個對象的時候,工廠的方法在創(chuàng)建Tb對象的時候,會同時把我們需要的
參數(shù)也創(chuàng)建好,并且填充進來,這樣在我們開發(fā)程序的時候就會方便很多

要想使用依賴注入和控制反轉(zhuǎn),就必須先注冊類:

$app->bind(\App\Ta::class, \App\Ta::class); $app->bind(\App\Tb::class, \App\Tb::class);

//為什么我們的綁定和官方源碼不一樣呢,來看看
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,  //其實就是一個接口
App\Exceptions\Handler::class                         //具體實現(xiàn)接口的一個類
);

并不是在bootstrap/app.php里面注冊,后面會說道

服務(wù)提供者和laravel低耦合架構(gòu)

在入口index.php文件中make 了一個內(nèi)核:

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

內(nèi)核繼承了HttpKernel,在httpKernel中:

//啟動配置
protected $bootstrappers = [
    'Illuminate\Foundation\Bootstrap\DetectEnvironment',
    'Illuminate\Foundation\Bootstrap\LoadConfiguration',
    'Illuminate\Foundation\Bootstrap\ConfigureLogging',
    'Illuminate\Foundation\Bootstrap\HandleExceptions',
    'Illuminate\Foundation\Bootstrap\RegisterFacades',
    'Illuminate\Foundation\Bootstrap\RegisterProviders',
    'Illuminate\Foundation\Bootstrap\BootProviders',
];   
//啟動了LoadConfiguration配置文件

在config/app.php中,return了一個數(shù)組,其中:

這個提供了服務(wù)提供者的路徑:
'providers' => [
    Illuminate\Auth\AuthServiceProvider::class,
    Illuminate\Broadcasting\BroadcastServiceProvider::class,
    Illuminate\Bus\BusServiceProvider::class,
    Illuminate\Cache\CacheServiceProvider::class,
    Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
    Illuminate\Cookie\CookieServiceProvider::class,
    Illuminate\Database\DatabaseServiceProvider::class,
    Illuminate\Encryption\EncryptionServiceProvider::class,
    Illuminate\Filesystem\FilesystemServiceProvider::class,
    Illuminate\Foundation\Providers\FoundationServiceProvider::class,
    Illuminate\Hashing\HashServiceProvider::class,
    Illuminate\Mail\MailServiceProvider::class,
   ]
httpKernel中會根據(jù)這個路徑注冊服務(wù)提供者,生成對應(yīng)的對象

在Providers文件夾下,有各種注冊的服務(wù)提供者:

AppServiceProvider.php中繼承了Serviceprovider,Serviceprovider中傳了一個$app對象:
    public function __construct($app)
{
    $this->app = $app;
}
在AppServiceProvider.php中,有兩個函數(shù):
    public function boot()   //啟動函數(shù),先執(zhí)行這個,可以進行一些前提配置
{
    //
    $a = 111;
}
 public function register()  //注冊綁定類
{
    //
    $this->app->bind('\App\Ta::class',\App\Ta:class);
        $this->app->bind('\App\Tb::class',\App\Tb:class);
}

總結(jié)一下

laravel是怎么運行的

最大就是容器對象:Application

管理laravel框架里面的所有內(nèi)容
要想使用這些功能,我們要先注冊

什么是服務(wù):

 把解決某一個相關(guān)功能一系列相關(guān)的類打包封裝,就是一個服務(wù)

服務(wù)提供者做什么的:

服務(wù)提供者就是擴展我們功能的地方
Application根據(jù)配置文件幫我們把服務(wù)注冊,而所有我們需要的服務(wù)功能都是在
服務(wù)提供者文件中進行注冊的(/app/Providers/AppServiceProvider.php)

這樣在多人開發(fā)的時候,每個人把要注冊的類寫在自己的服務(wù)提供者中
Providers/的文件中(自己建立)的register的方法里面

Facades的使用

為了在每次使用類的使用不在生成重復(fù)的對象,或者夸文件使用一個對象,我們需要這樣使用對象:

User::getName();

這樣來配置我們自己的類:

namespace App\Http;
class Z extends \Illuminate\Support\Facades\Facade
{
    protected static function getFacadeAccessor()
    {
        return '\App\TA';
    }
}

Z繼承Facade,返回一個類名,這樣我們在使用Z類的時候,會自動調(diào)用TA類的方法
使用: \App\Http\Z::getTitle() 調(diào)用的就是TA類臉的getTitle()方法
注意:必須用單列模式注冊TA類

我們來做個簡化,在用的時候不帶命名空間:

在配置文件中,我們給\App\Http\Z起個別名就好了:

'Z' => \App\Http\Z::class,

中間件

為了不把大量的代碼都寫在controler里面,我們把某一些特定的服務(wù)提取出來,當(dāng)做中間件

各種驗證什么的就由中間件來做

創(chuàng)建中間件

項目更目錄下:

php artisan make:middleware testMiddleware

然后注冊中間件:

配置文件/app/Http/Kernel.php

protected $middlewareGroups = [ ]
全局中間件,無論如何都是會執(zhí)行的

protected $routeMiddleware = [ ]
自定義別名中間件,我們一般把中間件注冊在這里

調(diào)用中間件:

單個:
Route::get('/mid', ['middleware'=>'test',function () {
return redirect('/facades');
}]);

多個:
Route::get('/mid', ['middleware'=>['test','test2'],function () {
return redirect('/facades');
}]);

路由組使用中間件:
Route::group(['middleware' => 'auth'], function () {
    Route::get('/', function ()    {
        // 使用 Auth 中間件
    });

    Route::get('user/profile', function () {
        // 使用 Auth 中間件
    });
});
路由組共用中間件 auth
在路由里配置中間件很適合很多個方法都使用同一個中間件
一般用于生產(chǎn)驗證和權(quán)限驗證

只對一個控制器生效的中間件:
在控制器的構(gòu)造函數(shù)中這樣寫:
public function __construct()
{
    $this->middleware('test');
}
這樣在使用控制器的時候,優(yōu)先加載中間件

Request

laravel默認(rèn)幫我們開啟了csrf驗證,這樣我們在本地提交表單是提交不過去的,我們?yōu)榱藴y試,先關(guān)閉:

在app/Http/Kernel.php文件中,注釋掉這個:
//            \App\Http\Middleware\VerifyCsrfToken::class,

這個csrf認(rèn)證可以驗證非法請求或者表單的重復(fù)提交,后面會說道

測試request

在方法里這樣用:

public function store(Request $request)
{
   //提交到數(shù)據(jù)庫
   dd($request);
 }
 打印可以看出,里面包含了關(guān)于一次請求的所有信息
 
 取值:
 $requset['name'];

validate驗證

在stroe方法中這樣寫:

$this->validate($request, [
  'name' => 'required',
  'email' => 'required|email',
]);

開啟錯誤提示:

在模板引擎中這樣寫:

@if (count($errors) > 0)
<div class="alert alert-danger">
    <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
</div>
@endif

但是呢,驗證都放在方法中,代碼就不會那么純潔了,我們需要一個單獨表單請求驗證文件:

php artisan make:request StoreBlogPostRequest

新生成的類文件會被放在 app/Http/Requests 目錄下。讓我們將一些驗證規(guī)則加入到 rules 方法中:
public function rules()
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];
}

在控制器的方法中這樣使用:
public function store(StoreBlogPostRequest $request)
{
    // 傳入的請求是有效的...
}

開啟csrf認(rèn)證

打開我們之前關(guān)閉的中間件:

\App\Http\Middleware\VerifyCsrfToken::class,

然后呢,我們需要在表單中加入一個隱藏域,用來傳遞服務(wù)器傳來的token:

<input type="hidden" name="_token" value="{{ csrf_token() }}">

表單助手插件:

安裝:

composer require laravelcollective/html

配置,在config/app.php中:

Collective\Html\HtmlServiceProvider::class

別名:
'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class, 

模板中這樣用:

{!! Form::open(array('route'=>'test.store','class'=>'form','novalidate'=>'novalidate')) !!}
{!! Form::label('your name') !!}
{!! Form::text('name',null,
    array('required',
        'class'=>'form-control',
        'placeholder'=>'your name')) !!}
{!! Form::label('your email') !!}
{!! Form::text('email',null,
    array('required',
        'class'=>'form-control',
        'placeholder'=>'your email address')) !!}
{!! Form::submit('添加') !!}

在用戶填寫錯誤的時候,會保留用戶的填寫信息

orm模型

就是把數(shù)據(jù)表的結(jié)構(gòu)跟我們的一個類對應(yīng)上了

創(chuàng)建模型

數(shù)據(jù)模型建立(生成文件在app文件夾下):

普通建立:
php artisan make:model Test

建立的同時生成數(shù)據(jù)庫遷移:
php artisan make:model Test --migration

之后我們就可以在控制其中很方便的使用模型對象了:

    $test = new Test();  //要現(xiàn)在開始引入命名空間
    $test->name = $request['name'];
    $test->email = $request['email'];
    $test->save();
    // $test->where('id',1)->delete();
    dd($test->all());

利用郵件服務(wù)將表單推送到手機

為了方便將提示信息推送給用戶,我們使用郵箱服務(wù):

首先安裝email擴展:

composer require guzzlehttp/guzzle

然后修改配置文件,根目錄下得.env文件,這樣改:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com
MAIL_PORT=25
MAIL_USERNAME=n13521760670@163.com
MAIL_PASSWORD=******
MAIL_ENCRYPTION=null

config/mail.php也要修改:

  'from' => ['address' => 'n13521760670@163.com', 'name' => 'n13521760670@163.com'],

在控制器中這樣使用:

    $data = [
        'name' => $request->get('name'),
        'email' => $request->get('email')
    ];
    \Mail::send('email', $data, function ($m) use ($data) {
        $m->from('n13521760670@163.com', '測試發(fā)送郵件');
        $m->to('975974740@qq.com',$data['name'])->subject('laravel練習(xí)使用郵件');
    });

模板中這樣設(shè)置信息:

<p>
用戶:{{$name}} email:{{$email}}
正在練習(xí)使用laravel
</p>

利用laravel認(rèn)證模板完成用戶注冊登錄

主要是利用框架自帶的Auth模塊

未完待續(xù)...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艺玲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子忌警,更是在濱河造成了極大的恐慌秒梳,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朋譬,死亡現(xiàn)場離奇詭異兴垦,居然都是意外死亡探越,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門枕屉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搀擂,“玉大人铜异,你說我怎么就攤上這事。” “怎么了东抹?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵缭黔,是天一觀的道長。 經(jīng)常有香客問我别渔,道長,這世上最難降的妖魔是什么喇伯? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任拨与,我火速辦了婚禮,結(jié)果婚禮上捻悯,老公的妹妹穿的比我還像新娘淤毛。我一直安慰自己低淡,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布事期。 她就那樣靜靜地躺著纸颜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唠倦。 梳的紋絲不亂的頭發(fā)上涮较,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天狂票,我揣著相機與錄音,去河邊找鬼慌盯。 笑死掂器,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灭必。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼跟衅,長吁一口氣:“原來是場噩夢啊……” “哼璃饱!你這毒婦竟也來了荚恶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤食寡,失蹤者是張志新(化名)和其女友劉穎廓潜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呻畸,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡伤为,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年据途,在試婚紗的時候發(fā)現(xiàn)自己被綠了颖医。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡糖驴,死狀恐怖佛致,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤筷弦,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蜕乡,受9級特大地震影響梗夸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辛块,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一铅碍、第九天 我趴在偏房一處隱蔽的房頂上張望胞谈。 院中可真熱鬧,春花似錦卿捎、人聲如沸径密。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伪很。三九已至,卻和暖如春猫十,著一層夾襖步出監(jiān)牢的瞬間呆盖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留株扛,地道東北人汇荐。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓掀淘,卻偏偏與公主長得像油昂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拦惋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容