有別於之前獨立使用Socialite
這次我們利用ServiceProvider來設定Laravel Blade Engine
利用composer安裝 illuminate/view
```
composer require illunimate/view
```
config.php
```php
require __DIR__.'/vendor/autoload.php';
use Illuminate\Container\Container;
use Illuminate\Events\Dispatcher;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Support\Facades\Facade;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Fluent;
use Illuminate\View\ViewServiceProvider;
$app = new Container();
$app['events'] = new Dispatcher();
$app['config'] = new Fluent();
$app['files'] = new Filesystem();
// 設定view資料夾
$app['config']['view.paths'] = [__DIR__.'/views/'];
// 設定快取資料夾
$app['config']['view.compiled'] = __DIR__.'/compiled/';
// 利用ServiceProvider來初始化View
$serviceProvider = new ViewServiceProvider($app);
// 註冊
$serviceProvider->register();
// boot
$serviceProvider->boot();
Facade::setFacadeApplication($app);
// 設Facade View Alias方便使用
class_alias(View::class, 'View');
```
views/test.blade.php
```php
@foreach ([1,2,3] as $v)
{{ $v }}
@endforeach
```
index.php
```php
require __DIR__.'/config.php';
echo View::make('test')->render();
```
完整檔案在[Github](https://github.com/recca0120/laravel-blade-standalone-demo)
2016年2月16日 星期二
2016年2月1日 星期一
獨立使用Laravel Socialite
有別於前一篇,這次我們用不使用Illuminate\Container\Container來執行Laravel Socialite
## composer
```
composer require laravel/socialite
```
## php
```php
require __DIR__.'/vendor/autoload.php';
use Illuminate\Http\Request;
use Illuminate\Support\Fluent;
use Laravel\Socialite\SocialiteManager;
use Symfony\Component\HttpFoundation\Session\Session;
/*
* 用 \Illuminate\Support\Fluent
* 替代 \Illuminate\Container\Container
*/
$app = new Fluent();
/*
* 用 \Illuminate\Support\Fluent
* 替代 \Illuminate\Contracts\Config\Repository
*/
$config = new Fluent();
/*
* 取得 Request
*/
$request = Request::capture();
/*
* 使用 Symfony Session
*/
$session = new Session();
/*
* session start
*/
$session->start();
/*
* 設置 session
*/
$request->setSession($session);
/*
* Facebook飍數
*/
$config['services.facebook'] = [
'client_id' => '900358040081723',
'client_secret' => '06134ad6946069c6457d06688b22c259',
'redirect' => 'http://localhost/test/socialite/index.php/callback',
];
/*
* 將 config, request置入 app
*/
$app['config'] = $config;
$app['request'] = $request;
// 以上為 socalite app所需設定,接下來參考官方文件即可
$socialiteManager = new SocialiteManager($app);
$provider = $socialiteManager
->with('facebook')
/*
* 只要是oauth2就必須執行此方法,
* 因為我們用的是Symfony Session而不是Laravel Session
*/
->stateless();
if (strpos($_SERVER['REQUEST_URI'], '/callback') === false) {
$response = $provider->redirect();
return $response->send();
}
var_dump((array) $provider->user());
```
2016年1月31日 星期日
如何獨立使用Laravel Eloquent
Laravel的套件是可以獨立使用的,並不需要加入整個framework
我們一起來了解如何操作
composer 新增套件
```bash
composer require illuminate/container illuminate/contracts illuminate/database illuminate/events illuminate/hashing illuminate/support nesbot/carbon
```
新增bootstrap.php
```php
require __DIR__.'/../vendor/autoload.php';
use Illuminate\Container\Container;
use Illuminate\Support\Facades\Facade;
use Illuminate\Support\Str;
class Application extends Container
{
public $aliases = [
\Illuminate\Support\Facades\Facade::class => 'Facade',
\Illuminate\Support\Facades\App::class => 'App',
\Illuminate\Support\Facades\Schema::class => 'Schema',
];
public function __construct()
{
date_default_timezone_set('UTC');
if (class_exists('\Carbon\Carbon') === true) {
\Carbon\Carbon::setTestNow(\Carbon\Carbon::now());
}
$this['app'] = $this;
$this->setupAliases();
$this->setupDispatcher();
$this->setupConnection();
Facade::setFacadeApplication($this);
Container::setInstance($this);
}
public function setupDispatcher()
{
if (class_exists('\Illuminate\Events\Dispatcher') === false) {
return;
}
$this['events'] = new \Illuminate\Events\Dispatcher($this);
}
public function setupAliases()
{
foreach ($this->aliases as $className => $alias) {
class_alias($className, $alias);
}
}
public function setupConnection()
{
if (class_exists('\Illuminate\Database\Capsule\Manager') === false) {
return;
}
$connection = new \Illuminate\Database\Capsule\Manager();
$connection->addConnection([
'driver' => 'sqlite',
'database' => ':memory:',
]);
if (isset($this['events']) === true) {
$connection->setEventDispatcher($this['events']);
}
$connection->bootEloquent();
$connection->setAsGlobal();
$this['db'] = $connection;
}
public function migrate($method)
{
if (class_exists('\Illuminate\Database\Capsule\Manager') === false) {
return;
}
foreach (glob(__DIR__.'/../database/migrations/*.php') as $file) {
include_once $file;
if (preg_match('/\d+_\d+_\d+_\d+_(.*)\.php/', $file, $m)) {
$className = Str::studly($m[1]);
$migration = new $className();
call_user_func_array([$migration, $method], []);
}
}
}
public function environment()
{
return 'testing';
}
}
if (function_exists('bcrypt') === false) {
/**
* Hash the given value.
*
* @param string $value
* @param array $options
*
* @return string
*/
function bcrypt($value, $options = [])
{
return (new \Illuminate\Hashing\BcryptHasher())->make($value, $options);
}
}
if (function_exists('app') === false) {
function app()
{
return App::getInstance();
}
}
if (Application::getInstance() == null) {
new Application();
}
```
只要再建立資料表及建立Model
就可以正常使用Eloquent了
訂閱:
文章 (Atom)