把Laravel5產品放到阿里輕雲

阿里的輕雲服務器滿足Laravel5的基本要求(PHP >= 5.4,Mcrypt PHP Extension,OpenSSL PHP Extension,Mbstring PHP Extension,Tokenizer PHP Extension),於是嘗試着部署了下。首先我是切換到Linux系統的,不知道Win下是什麼狀況。然後在高級環境設置中把php版本設置爲5.5,php.ini全部打開(未測試關閉情況)。然後用FTP上傳文件到服務器。

把除public文件夾外的所有文件上傳到/cgi-bin中,修改storage文件夾及其子文件夾爲可寫權限。把public中所有文件上傳到/htdocs中。修改/htdocs/index.php中如下兩行:

// require __DIR__.'/../bootstrap/autoload.php';
require __DIR__.'/../cgi-bin/bootstrap/autoload.php';

// $app = require_once __DIR__.'/../bootstrap/app.php';
$app = require_once __DIR__.'/../cgi-bin/bootstrap/app.php';

正常情況下,此時應該能正常訪問無數據庫操作的頁面。這裏也是我比較困惑的地方,配置文件.env無法被讀取,感覺是上傳後就遭到服務器刪除了。之前測試.htaccess也怪怪的,還懷疑是不是沒開mod_rewrite。但是我在子文件夾裝wordpress測試就正常,所以.htaccess和mod_rewrite都是正常的。但是.env始終讀取不到,我還試圖修改vendor\vlucas\phpdotenv\src\Dotenv.php也不行,最後直接把數據庫信息寫config/database.php裏了。這樣數據庫就能正常使用了。.env中的其他設置也都可以在config中各個文件單獨設置,當然了如果.env可用還是用.env的好。

使用laravel5自帶的用戶授權系統

我這個不是教程,只是記錄。目標是修改laravel5默認的用戶系統,使之能迅速使用。註冊時在原有信息基礎上添加手機號。至於搭建laravel看參見:在ubuntu上部署apache和laravel5

首先修改數據庫,添加phone列。由於我數據庫還是空的所以就先php artisan migrate:rollback,然後在database/migrations/2014_10_12_000000_create_users_table.php up函數中添加一行

$table->string('phone')->unique();

然後執行php artisan migrate這樣用戶數據庫就有phone了,而且phone還是唯一的。然後修改app/Http/Controllers/Auth/AuthController.php,主要是重載postRegister和postLogin兩個函數。原函數可從vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesAndRegistersUsers.php中複製過來,修改後是這樣的:

//app/Http/Controllers/Auth/AuthController.php
<?php namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\Registrar;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Http\Request;

class AuthController extends Controller {



	use AuthenticatesAndRegistersUsers;
        //修改跳轉地址
        protected $redirectTo = '/';


	public function __construct(Guard $auth, Registrar $registrar)
	{
		$this->auth = $auth;
		$this->registrar = $registrar;

		$this->middleware('guest', ['except' => 'getLogout']);
	}

	public function postRegister(Request $request)
	{       
                //數據驗證
                $this->validate($request, ['phone'=>'required|numeric|unique:users',);
		$validator = $this->registrar->validator($request->all());

		if ($validator->fails())
		{
			$this->throwValidationException(
				$request, $validator
			);
		}

		$this->auth->login($this->registrar->create($request->all()));

		return redirect($this->redirectPath());
	}
        
        //這裏修改爲可以通過郵箱或手機登陸
        public function postLogin(Request $request)
	{
		
                $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'phone';
                $request->merge([$field => $request->input('login')]);
                $this->validate($request, [
			'login' => 'required', 'password' => 'required',
		]);

		$credentials = $request->only($field, 'password');

		if ($this->auth->attempt($credentials, $request->has('remember')))
		{
			return redirect()->intended($this->redirectPath());
		}

		return redirect($this->redirectPath())
					->withInput($request->only('email', 'remember'))
					->withErrors([
						'email' => $this->getFailedLoginMessage(),
					]);
	}
	protected function getFailedLoginMessage()
	{
		return '郵箱或手機與密碼不匹配。';
	}

}

然後修改下位於/home/zenggl/case1/resources/views/auth下的登陸和註冊的表單,登錄表單修改一下email輸入框的name爲login,註冊表單添加一個name爲phone的輸入框。

密碼重置功能laravel5中也是實現好的,只用配置一下郵件發送就好了,我以QQ企業郵箱爲例配置。首先在.env中填入郵件服務器信息,然後設置config中的mail就好了:

//.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.exmail.qq.com
MAIL_PORT=465
MAIL_USERNAME=yourname@yourmail.com
MAIL_PASSWORD=yourPassword
//config/mail.php
//視郵箱服務器而定,QQ郵箱要用ssl加密,且發信人要和發信帳號一致
'from' => ['address' => 'yourname@yourmail.com', 'name' => null],
'encryption' => 'ssl',

修改提示語言爲簡體中文。首先修改config/app.index中的locale值爲zh-cmn-Hans,然後複製一份resources/lang/en並重命名爲zh-cmn-Hans,最後修改validation.php就可以了。

在ubuntu上部署apache和laravel5

新建一個laravel項目:

#切換到目標目錄,如:
cd /var/www/
#創建項目l5
sudo composer create-project laravel/laravel l5
#改變文件所有者爲自己,方便編輯
sudo chown USER:USER -R l5
#這兩個文件夾要設置777,否則服務器5000錯誤
cd l5
sudo chmod 777 -R storage/ vendor/
#配置數據庫信息
nano .env
php artisan migrate

如果是新建的apache服務器,可能需要開啟mod_rewrite模塊,可在phpinfo()中搜索mod_rewrite查看模塊是否開啟成功。可以參考:ubuntu搭建web服务器。然後新建一個虛擬主機,我們直接在/etc/apache2/sites-available/000-default.conf中添加一個VirtualHost:

<VirtualHost *:80>
    ServerAdmin service@mail.com
    DocumentRoot "/var/www/l5/public"
    ServerName l5.local
    ServerAlias www.l5.local

    <Directory "/var/www/l5/public">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

修改host文件/etc/hosts,添加一行127.0.0.1對應l5.local

此時就能通過http://l5.local訪問laravel5項目,通過http://l5.local/home測試用戶註冊登陸等。

題外話:我這裏的代碼高亮用的WP SyntaxHighlighter Version 1.7.3,在顯示VirtualHost起始標籤的時候有錯誤,所以後來用了原始的pre標籤。不知道有什麼解決辦法。