├── tmp └── .gitkeep ├── users ├── public │ ├── favicon.ico │ ├── robots.txt │ ├── .htaccess │ └── index.php ├── storage │ ├── logs │ │ └── .gitignore │ ├── app │ │ ├── public │ │ │ └── .gitignore │ │ └── .gitignore │ └── framework │ │ ├── views │ │ └── .gitignore │ │ ├── cache │ │ ├── data │ │ │ └── .gitignore │ │ └── .gitignore │ │ ├── sessions │ │ └── .gitignore │ │ ├── testing │ │ └── .gitignore │ │ └── .gitignore ├── bootstrap │ ├── cache │ │ └── .gitignore │ └── app.php ├── database │ ├── .gitignore │ ├── seeds │ │ ├── DatabaseSeeder.php │ │ └── UsersTableSeeder.php │ ├── migrations │ │ ├── 2014_10_12_100000_create_password_resets_table.php │ │ └── 2014_10_12_000000_create_users_table.php │ └── factories │ │ └── UserFactory.php ├── .gitattributes ├── .gitignore ├── tests │ ├── TestCase.php │ ├── Unit │ │ └── ExampleTest.php │ ├── Feature │ │ └── ExampleTest.php │ └── CreatesApplication.php ├── .styleci.yml ├── .editorconfig ├── resources │ ├── sass │ │ ├── app.scss │ │ └── _variables.scss │ ├── lang │ │ └── en │ │ │ ├── pagination.php │ │ │ ├── auth.php │ │ │ ├── passwords.php │ │ │ └── validation.php │ ├── js │ │ ├── components │ │ │ └── ExampleComponent.vue │ │ ├── app.js │ │ └── bootstrap.js │ └── views │ │ ├── welcome.blade.php │ │ └── ws.blade.php ├── app │ ├── Http │ │ ├── Middleware │ │ │ ├── EncryptCookies.php │ │ │ ├── TrimStrings.php │ │ │ ├── CheckForMaintenanceMode.php │ │ │ ├── TrustProxies.php │ │ │ ├── Authenticate.php │ │ │ ├── VerifyCsrfToken.php │ │ │ └── RedirectIfAuthenticated.php │ │ ├── Controllers │ │ │ ├── Controller.php │ │ │ └── Auth │ │ │ │ ├── ForgotPasswordController.php │ │ │ │ ├── LoginController.php │ │ │ │ ├── ResetPasswordController.php │ │ │ │ ├── VerificationController.php │ │ │ │ └── RegisterController.php │ │ └── Kernel.php │ ├── Providers │ │ ├── BroadcastServiceProvider.php │ │ ├── AppServiceProvider.php │ │ ├── AuthServiceProvider.php │ │ ├── EventServiceProvider.php │ │ └── RouteServiceProvider.php │ ├── User.php │ ├── Console │ │ └── Kernel.php │ └── Exceptions │ │ └── Handler.php ├── routes │ ├── channels.php │ ├── web.php │ ├── console.php │ ├── api.php │ └── websocket.php ├── webpack.mix.js ├── server.php ├── .env.example ├── config │ ├── view.php │ ├── services.php │ ├── hashing.php │ ├── broadcasting.php │ ├── filesystems.php │ ├── queue.php │ ├── logging.php │ ├── cache.php │ ├── swoole_websocket.php │ ├── auth.php │ ├── mail.php │ ├── database.php │ ├── swoole_http.php │ ├── session.php │ └── app.php ├── package.json ├── phpunit.xml ├── composer.json └── artisan ├── .gitignore ├── echo.php ├── public ├── simple.html ├── events.html └── websocket.html ├── composer.json ├── Dockerfile ├── channel.php ├── process.php ├── serve-file.php ├── LICENSE ├── docker-compose.yml ├── client.php ├── README.md ├── event-source.php ├── slim.php ├── websocket.php ├── router.php └── composer.lock /tmp/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /users/public/favicon.ico: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /users/storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_STORE 2 | 3 | tmp/*.html 4 | vendor/ 5 | -------------------------------------------------------------------------------- /users/bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /users/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /users/storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /users/database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | *.sqlite-journal 3 | -------------------------------------------------------------------------------- /users/storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !public/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /users/storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /users/storage/framework/cache/data/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /users/storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /users/storage/framework/testing/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /users/storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !data/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /echo.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |Hello
8 | 9 | 10 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "nikic/fast-route": "^1.3", 4 | "slim/slim": "^3.12" 5 | }, 6 | "require-dev": { 7 | "swoole/ide-helper": "@dev" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /users/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /public/storage 4 | /storage/*.key 5 | /vendor 6 | .env 7 | .phpunit.result.cache 8 | Homestead.json 9 | Homestead.yaml 10 | npm-debug.log 11 | yarn-error.log 12 | -------------------------------------------------------------------------------- /users/tests/TestCase.php: -------------------------------------------------------------------------------- 1 | call(UsersTableSeeder::class); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /users/database/seeds/UsersTableSeeder.php: -------------------------------------------------------------------------------- 1 | create(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /users/tests/Unit/ExampleTest.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /users/app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | get('/'); 18 | 19 | $response->assertStatus(200); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /users/tests/CreatesApplication.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 19 | 20 | return $app; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /users/app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | expectsJson()) { 18 | return route('login'); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /users/routes/channels.php: -------------------------------------------------------------------------------- 1 | id === (int) $id; 16 | }); 17 | -------------------------------------------------------------------------------- /users/app/Http/Middleware/VerifyCsrfToken.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /users/routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 18 | })->describe('Display an inspiring quote'); 19 | -------------------------------------------------------------------------------- /users/server.php: -------------------------------------------------------------------------------- 1 | 8 | */ 9 | 10 | $uri = urldecode( 11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 12 | ); 13 | 14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the 15 | // built-in PHP web server. This provides a convenient way to test a Laravel 16 | // application without having installed a "real" web server software here. 17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 18 | return false; 19 | } 20 | 21 | require_once __DIR__.'/public/index.php'; 22 | -------------------------------------------------------------------------------- /users/app/Http/Middleware/RedirectIfAuthenticated.php: -------------------------------------------------------------------------------- 1 | check()) { 21 | return redirect('/home'); 22 | } 23 | 24 | return $next($request); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /users/resources/js/components/ExampleComponent.vue: -------------------------------------------------------------------------------- 1 | 2 |Hello
8 | 9 | 10 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /users/app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire') 28 | // ->hourly(); 29 | } 30 | 31 | /** 32 | * Register the commands for the application. 33 | * 34 | * @return void 35 | */ 36 | protected function commands() 37 | { 38 | $this->load(__DIR__.'/Commands'); 39 | 40 | require base_path('routes/console.php'); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 James Doyle 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /users/app/Http/Controllers/Auth/LoginController.php: -------------------------------------------------------------------------------- 1 | middleware('guest')->except('logout'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /users/app/Http/Controllers/Auth/ResetPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | swoole: 5 | # image: phpswoole/swoole:latest 6 | image: phpswoole/swoole:4.5.2-php7.4 7 | environment: 8 | - DOCKER=1 9 | - HOST=0.0.0.0 10 | - HOSTNAME=docker.local 11 | - PORT=8080 12 | - SWOOLE_HTTP_HOST=0.0.0.0 # required for Laravel swoole 13 | - SWOOLE_HTTP_WEBSOCKET=true # required for Laravel swoole websocket 14 | command: php /workdir/serve-file.php start 15 | # command: php /workdir/client.php start # broken without additional async extension 16 | # command: php /workdir/channel.php start # broken without additional async extension 17 | # command: php /workdir/process.php start 18 | # command: php /workdir/router.php start 19 | # command: php /workdir/websocket.php start 20 | # command: php /workdir/slim.php start 21 | # command: php /workdir/event-source.php start 22 | # command: php /workdir/users/artisan serve --host=0.0.0.0 --port=1215 # Laravel no swoole 23 | # command: php /workdir/users/artisan swoole:http start # Laravel with swoole 24 | ports: 25 | - "8080:8080" 26 | - "1215:1215" # Laravel port 27 | volumes: 28 | - ./:/workdir 29 | -------------------------------------------------------------------------------- /users/config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | resource_path('views'), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled View Path 23 | |-------------------------------------------------------------------------- 24 | | 25 | | This option determines where all the compiled Blade templates will be 26 | | stored for your application. Typically, this is within the storage 27 | | directory. However, as usual, you are free to change this value. 28 | | 29 | */ 30 | 31 | 'compiled' => env( 32 | 'VIEW_COMPILED_PATH', 33 | realpath(storage_path('framework/views')) 34 | ), 35 | 36 | ]; 37 | -------------------------------------------------------------------------------- /users/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "npm run development", 5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", 6 | "watch": "npm run development -- --watch", 7 | "watch-poll": "npm run watch -- --watch-poll", 8 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", 9 | "prod": "npm run production", 10 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" 11 | }, 12 | "devDependencies": { 13 | "axios": "^0.21", 14 | "bootstrap": "^4.0.0", 15 | "cross-env": "^5.1", 16 | "jquery": "^3.5", 17 | "laravel-mix": "^4.0.7", 18 | "lodash": "^4.17.21", 19 | "popper.js": "^1.12", 20 | "resolve-url-loader": "^2.3.1", 21 | "sass": "^1.15.2", 22 | "sass-loader": "^7.1.0", 23 | "vue": "^2.5.17" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /client.php: -------------------------------------------------------------------------------- 1 | '8.8.8.8']); 10 | 11 | // DNS lookup would block the process - so we go async 12 | Async::dnsLookup('example.com', function ($domain, $ip) { 13 | // Client can only take an IP so we need to resolve it first 14 | $client = new Client($ip, 80); 15 | 16 | $client->setHeaders([ 17 | 'Host' => $domain, // which host? 18 | 'User-Agent' => 'swoole-http-client', 19 | 'Accept' => 'text/html,application/xhtml+xml,application/xml', 20 | 'Accept-Encoding' => 'gzip', 21 | ]); 22 | 23 | // now we can call methods on our client and pass URIs 24 | $client->get('/index.html', function ($response) { 25 | $out_file = sprintf(__DIR__ . '/tmp/output-%s.html', time()); 26 | Async::writefile($out_file, $response->body, function ($filename) { 27 | echo "write {$filename} ok\n"; 28 | // we can close the server now 29 | exit(); 30 | }); 31 | }); 32 | }); 33 | -------------------------------------------------------------------------------- /users/resources/js/app.js: -------------------------------------------------------------------------------- 1 | /** 2 | * First we will load all of this project's JavaScript dependencies which 3 | * includes Vue and other libraries. It is a great starting point when 4 | * building robust, powerful web applications using Vue and Laravel. 5 | */ 6 | 7 | require('./bootstrap'); 8 | 9 | window.Vue = require('vue'); 10 | 11 | /** 12 | * The following block of code may be used to automatically register your 13 | * Vue components. It will recursively scan this directory for the Vue 14 | * components and automatically register them with their "basename". 15 | * 16 | * Eg. ./components/ExampleComponent.vue ->Hello, %s
', $name)); 51 | }); 52 | 53 | // suppress output by passing "true" 54 | $slim = $app->run(true); 55 | 56 | // transfer the Slim headers to the Swoole app 57 | foreach ($slim->getHeaders() as $key => $value) { 58 | // content length is set when calling "end" 59 | if ($key !== 'Content-Length') { 60 | $res->header($key, $value[0]); 61 | } 62 | } 63 | 64 | $res->status($slim->getStatusCode()); 65 | 66 | // figure out if we are running in HTTPS 67 | $secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443); 68 | 69 | // just add a make pretend cookie here 70 | $res->cookie(explode('.', 'docker.local')[0], '1', strtotime('+1 day'), '/', getenv('HOSTNAME'), $secure , true); 71 | 72 | // write the output 73 | $res->end($slim->getBody()); 74 | }); 75 | 76 | $server->start(); 77 | -------------------------------------------------------------------------------- /websocket.php: -------------------------------------------------------------------------------- 1 | column('id', Table::TYPE_INT, 11); 17 | $messages->column('client', Table::TYPE_INT, 4); 18 | $messages->column('username', Table::TYPE_STRING, 64); 19 | $messages->column('message', Table::TYPE_STRING, 255); 20 | $messages->create(); 21 | 22 | $connections = new Table(1024); 23 | $connections->column('client', Table::TYPE_INT, 4); 24 | $connections->create(); 25 | 26 | $server = new Server($host, $port); 27 | 28 | $server->on('start', function (Server $server) use ($hostname, $port) { 29 | echo sprintf('Swoole HTTP server is started at http://%s:%s' . PHP_EOL, $hostname, $port); 30 | }); 31 | 32 | $server->on('open', function (Server $server, Request $request) use ($messages, $connections) { 33 | echo "connection open: {$request->fd}\n"; 34 | // store the client on our memory table 35 | $connections->set($request->fd, ['client' => $request->fd]); 36 | 37 | // update all the client with the existing messages 38 | foreach ($messages as $row) { 39 | $server->push($request->fd, json_encode($row)); 40 | } 41 | }); 42 | 43 | // we can also run a regular HTTP server at the same time! 44 | $server->on('request', function (Request $request, Response $response) { 45 | $response->header('Content-Type', 'text/html'); 46 | $response->end(file_get_contents(__DIR__ . '/public/websocket.html')); 47 | }); 48 | 49 | $server->on('message', function (Server $server, Frame $frame) use ($messages, $connections) { 50 | echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; 51 | 52 | // frame data comes in as a string 53 | $output = json_decode($frame->data, true); 54 | 55 | // assign a "unique" id for this message 56 | $output['id'] = time(); 57 | $output['client'] = $frame->fd; 58 | 59 | // now we can store the message in the Table 60 | $messages->set($output['username'] . time(), $output); 61 | 62 | // now we notify any of the connected clients 63 | foreach ($connections as $client) { 64 | $server->push($client['client'], json_encode($output)); 65 | } 66 | }); 67 | 68 | $server->on('close', function (Server $server, int $client) use ($connections) { 69 | echo "client {$client} closed\n"; 70 | // remove the client from the memory table 71 | $connections->del($client); 72 | }); 73 | 74 | $server->start(); 75 | -------------------------------------------------------------------------------- /users/config/queue.php: -------------------------------------------------------------------------------- 1 | env('QUEUE_CONNECTION', 'sync'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Queue Connections 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may configure the connection information for each server that 24 | | is used by your application. A default configuration has been added 25 | | for each back-end shipped with Laravel. You are free to add more. 26 | | 27 | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'sync' => [ 34 | 'driver' => 'sync', 35 | ], 36 | 37 | 'database' => [ 38 | 'driver' => 'database', 39 | 'table' => 'jobs', 40 | 'queue' => 'default', 41 | 'retry_after' => 90, 42 | ], 43 | 44 | 'beanstalkd' => [ 45 | 'driver' => 'beanstalkd', 46 | 'host' => 'localhost', 47 | 'queue' => 'default', 48 | 'retry_after' => 90, 49 | 'block_for' => 0, 50 | ], 51 | 52 | 'sqs' => [ 53 | 'driver' => 'sqs', 54 | 'key' => env('AWS_ACCESS_KEY_ID'), 55 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 56 | 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 57 | 'queue' => env('SQS_QUEUE', 'your-queue-name'), 58 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 59 | ], 60 | 61 | 'redis' => [ 62 | 'driver' => 'redis', 63 | 'connection' => 'default', 64 | 'queue' => env('REDIS_QUEUE', 'default'), 65 | 'retry_after' => 90, 66 | 'block_for' => null, 67 | ], 68 | 69 | ], 70 | 71 | /* 72 | |-------------------------------------------------------------------------- 73 | | Failed Queue Jobs 74 | |-------------------------------------------------------------------------- 75 | | 76 | | These options configure the behavior of failed queue job logging so you 77 | | can control which database and table are used to store the jobs that 78 | | have failed. You may change them to any database / table you wish. 79 | | 80 | */ 81 | 82 | 'failed' => [ 83 | 'database' => env('DB_CONNECTION', 'mysql'), 84 | 'table' => 'failed_jobs', 85 | ], 86 | 87 | ]; 88 | -------------------------------------------------------------------------------- /users/config/logging.php: -------------------------------------------------------------------------------- 1 | env('LOG_CHANNEL', 'stack'), 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Log Channels 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Here you may configure the log channels for your application. Out of 27 | | the box, Laravel uses the Monolog PHP logging library. This gives 28 | | you a variety of powerful log handlers / formatters to utilize. 29 | | 30 | | Available Drivers: "single", "daily", "slack", "syslog", 31 | | "errorlog", "monolog", 32 | | "custom", "stack" 33 | | 34 | */ 35 | 36 | 'channels' => [ 37 | 'stack' => [ 38 | 'driver' => 'stack', 39 | 'channels' => ['daily'], 40 | 'ignore_exceptions' => false, 41 | ], 42 | 43 | 'single' => [ 44 | 'driver' => 'single', 45 | 'path' => storage_path('logs/laravel.log'), 46 | 'level' => 'debug', 47 | ], 48 | 49 | 'daily' => [ 50 | 'driver' => 'daily', 51 | 'path' => storage_path('logs/laravel.log'), 52 | 'level' => 'debug', 53 | 'days' => 14, 54 | ], 55 | 56 | 'slack' => [ 57 | 'driver' => 'slack', 58 | 'url' => env('LOG_SLACK_WEBHOOK_URL'), 59 | 'username' => 'Laravel Log', 60 | 'emoji' => ':boom:', 61 | 'level' => 'critical', 62 | ], 63 | 64 | 'papertrail' => [ 65 | 'driver' => 'monolog', 66 | 'level' => 'debug', 67 | 'handler' => SyslogUdpHandler::class, 68 | 'handler_with' => [ 69 | 'host' => env('PAPERTRAIL_URL'), 70 | 'port' => env('PAPERTRAIL_PORT'), 71 | ], 72 | ], 73 | 74 | 'stderr' => [ 75 | 'driver' => 'monolog', 76 | 'handler' => StreamHandler::class, 77 | 'formatter' => env('LOG_STDERR_FORMATTER'), 78 | 'with' => [ 79 | 'stream' => 'php://stderr', 80 | ], 81 | ], 82 | 83 | 'syslog' => [ 84 | 'driver' => 'syslog', 85 | 'level' => 'debug', 86 | ], 87 | 88 | 'errorlog' => [ 89 | 'driver' => 'errorlog', 90 | 'level' => 'debug', 91 | ], 92 | ], 93 | 94 | ]; 95 | -------------------------------------------------------------------------------- /users/resources/views/welcome.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Super chatty chat over here.
12 |Open your chrome console
74 | 75 |
77 |