顯示具有 standalone 標籤的文章。 顯示所有文章
顯示具有 standalone 標籤的文章。 顯示所有文章

2016年2月16日 星期二

獨立使用Laravel Blade Template Engine

有別於之前獨立使用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月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了