在 PHP 程式中使用 Laravel 的元件

有時候,在獨立的 PHP 程式中,為了方便,也想要使用 Laravel 的元件。

啟始相關設定

define('BASEDIR', __DIR__.'/../rtcou-src.axd');
require BASEDIR.'/bootstrap/autoload.php';
$app = require_once BASEDIR.'/bootstrap/app.php';
$app->useStoragePath(__DIR__.'/storage');
$dotenv = new Dotenv();
$dotenv->load(BASEDIR);
use Illuminate\Database\Capsule\Manager as Capsule;
$la_container = new Illuminate\Container\Container;
$la_container['config'] = new Illuminate\Config\Repository();
// 啟始 DB 設定
$conf = 'database';
$conf_file = BASEDIR.'/config/'.$conf.'.php';
if (file_exists($conf_file)) {
    $la_container['config']->set($conf, require $conf_file);
}
// Capsule\Manager will overwrite ['config.database.default']
// Save the value and restore it later
$default_conn = $la_container['config']['database.default'];
$capsule = new Illuminate\Database\Capsule\Manager($la_container);
// restore ['config.database.default']
$capsule->getDatabaseManager()->setDefaultConnection($default_conn);
$capsule->setAsGlobal();
$capsule->bootEloquent();
// // 註冊 resource,下列兩種作法皆可
$la_container['db'] = $capsule;
// 啟始 View 的設定
use App\Lib\MyBlade as View;
// 設定 view 的設定
$viewPath = 'asp_func/views';
$cachePath = 'asp_func/cache';
$la_container['config']->set('view.paths', (array)$viewPath);
$la_container['config']->set('view.compiled', $cachePath);
$GLOBALS['view'] = new View($viewPath, $cachePath, $la_container);

使用

$view = $GLOBALS['view'];
echo $view->make('homepage', ['name' => 'John Doe'])->render();
$rs = DB::select("select @@version");
dump($rs);
use Illuminate\Http\Request as Request;
$request = Request::createFromGlobals();
$base = $request->getBasePath();