diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index bcabec4..66d34c3 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -15,6 +15,9 @@ class Kernel extends HttpKernel */ protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]; /** @@ -27,6 +30,7 @@ class Kernel extends HttpKernel \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..943e9a4 --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,18 @@ +id === (int) $userId; - }); + require base_path('routes/channels.php'); } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 87ffb05..5ea48d3 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -51,12 +51,9 @@ public function map() */ protected function mapWebRoutes() { - Route::group([ - 'middleware' => 'web', - 'namespace' => $this->namespace, - ], function ($router) { - require base_path('routes/web.php'); - }); + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); } /** @@ -68,12 +65,9 @@ protected function mapWebRoutes() */ protected function mapApiRoutes() { - Route::group([ - 'middleware' => 'api', - 'namespace' => $this->namespace, - 'prefix' => 'api', - ], function ($router) { - require base_path('routes/api.php'); - }); + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); } } diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php index 3830137..c64e19f 100644 --- a/bootstrap/autoload.php +++ b/bootstrap/autoload.php @@ -9,26 +9,9 @@ | | Composer provides a convenient, automatically generated class loader | for our application. We just need to utilize it! We'll require it -| into the script here so that we do not have to worry about the -| loading of any our classes "manually". Feels great to relax. +| into the script here so we do not have to manually load any of +| our application's PHP classes. It just feels great to relax. | */ require __DIR__.'/../vendor/autoload.php'; - -/* -|-------------------------------------------------------------------------- -| Include The Compiled Class File -|-------------------------------------------------------------------------- -| -| To dramatically increase your application's performance, you may use a -| compiled class file which contains all of the classes commonly used -| by a request. The Artisan "optimize" is used to create this file. -| -*/ - -$compiledPath = __DIR__.'/cache/compiled.php'; - -if (file_exists($compiledPath)) { - require $compiledPath; -} diff --git a/composer.json b/composer.json index a94eb33..25933b9 100644 --- a/composer.json +++ b/composer.json @@ -1,19 +1,21 @@ { "name": "laravel/laravel", "description": "The Laravel Framework.", - "keywords": ["framework", "laravel"], + "keywords": [ + "framework", + "laravel" + ], "license": "MIT", "type": "project", "require": { "php": ">=5.6.4", - "laravel/framework": "5.3.*" + "laravel/framework": "5.4.*", + "laravel/tinker": "~1.0" }, "require-dev": { "fzaninotto/faker": "~1.4", "mockery/mockery": "0.9.*", - "phpunit/phpunit": "~5.0", - "symfony/css-selector": "3.1.*", - "symfony/dom-crawler": "3.1.*" + "phpunit/phpunit": "~5.7" }, "autoload": { "classmap": [ @@ -24,9 +26,9 @@ } }, "autoload-dev": { - "classmap": [ - "tests/TestCase.php" - ] + "psr-4": { + "Tests\\": "tests/" + } }, "scripts": { "post-root-package-install": [ @@ -48,4 +50,4 @@ "preferred-install": "dist", "sort-packages": true } -} +} \ No newline at end of file diff --git a/config/app.php b/config/app.php index 717ee98..135e977 100644 --- a/config/app.php +++ b/config/app.php @@ -12,7 +12,7 @@ | any other location as required by the application or its packages. */ - 'name' => 'Laravel', + 'name' => env('APP_NAME', 'Laravel'), /* |-------------------------------------------------------------------------- @@ -166,8 +166,7 @@ /* * Package Service Providers... */ - - // + Laravel\Tinker\TinkerServiceProvider::class, /* * Application Service Providers... @@ -197,6 +196,7 @@ 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 'Bus' => Illuminate\Support\Facades\Bus::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, diff --git a/config/broadcasting.php b/config/broadcasting.php index 19a59ba..5eecd2b 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -32,8 +32,8 @@ 'pusher' => [ 'driver' => 'pusher', - 'key' => env('PUSHER_KEY'), - 'secret' => env('PUSHER_SECRET'), + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ // diff --git a/config/cache.php b/config/cache.php index 1d3de87..e87f032 100644 --- a/config/cache.php +++ b/config/cache.php @@ -46,7 +46,7 @@ 'file' => [ 'driver' => 'file', - 'path' => storage_path('framework/cache'), + 'path' => storage_path('framework/cache/data'), ], 'memcached' => [ diff --git a/config/compile.php b/config/compile.php deleted file mode 100644 index 04807ea..0000000 --- a/config/compile.php +++ /dev/null @@ -1,35 +0,0 @@ - [ - // - ], - - /* - |-------------------------------------------------------------------------- - | Compiled File Providers - |-------------------------------------------------------------------------- - | - | Here you may list service providers which define a "compiles" function - | that returns additional files that should be compiled, providing an - | easy way to get common files from any packages you are utilizing. - | - */ - - 'providers' => [ - // - ], - -]; diff --git a/config/database.php b/config/database.php index 1b87e0f..cab5d06 100644 --- a/config/database.php +++ b/config/database.php @@ -2,19 +2,6 @@ return [ - /* - |-------------------------------------------------------------------------- - | PDO Fetch Style - |-------------------------------------------------------------------------- - | - | By default, database results will be returned as instances of the PHP - | stdClass object; however, you may desire to retrieve records in an - | array format for simplicity. Here you can tweak the fetch style. - | - */ - - 'fetch' => PDO::FETCH_OBJ, - /* |-------------------------------------------------------------------------- | Default Database Connection Name @@ -59,8 +46,9 @@ 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', - 'collation' => 'utf8_unicode_ci', + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, @@ -79,6 +67,17 @@ 'sslmode' => 'prefer', ], + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + ], + ], /* @@ -107,7 +106,7 @@ 'redis' => [ - 'cluster' => false, + 'client' => 'predis', 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), diff --git a/config/filesystems.php b/config/filesystems.php index e1c4c95..4544f60 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -13,7 +13,7 @@ | */ - 'default' => 'local', + 'default' => env('FILESYSTEM_DRIVER', 'local'), /* |-------------------------------------------------------------------------- @@ -26,7 +26,7 @@ | */ - 'cloud' => 's3', + 'cloud' => env('FILESYSTEM_CLOUD', 's3'), /* |-------------------------------------------------------------------------- @@ -51,15 +51,16 @@ 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', - 'key' => 'your-key', - 'secret' => 'your-secret', - 'region' => 'your-region', - 'bucket' => 'your-bucket', + 'key' => env('AWS_KEY'), + 'secret' => env('AWS_SECRET'), + 'region' => env('AWS_REGION'), + 'bucket' => env('AWS_BUCKET'), ], ], diff --git a/config/mail.php b/config/mail.php index 73c691f..bb92224 100644 --- a/config/mail.php +++ b/config/mail.php @@ -11,8 +11,8 @@ | sending of e-mail. You may specify which one you're using throughout | your application here. By default, Laravel is setup for SMTP mail. | - | Supported: "smtp", "mail", "sendmail", "mailgun", "mandrill", - | "ses", "sparkpost", "log" + | Supported: "smtp", "sendmail", "mailgun", "mandrill", "ses", + | "sparkpost", "log", "array" | */ @@ -86,30 +86,38 @@ 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + /* |-------------------------------------------------------------------------- - | SMTP Server Password + | Sendmail System Path |-------------------------------------------------------------------------- | - | Here you may set the password required by your SMTP server to send out - | messages from your application. This will be given to the server on - | connection so that the application will be able to send messages. + | When using the "sendmail" driver to send e-mails, we will need to know + | the path to where Sendmail lives on this server. A default path has + | been provided here, which will work well on most of your systems. | */ - 'password' => env('MAIL_PASSWORD'), + 'sendmail' => '/usr/sbin/sendmail -bs', /* |-------------------------------------------------------------------------- - | Sendmail System Path + | Markdown Mail Settings |-------------------------------------------------------------------------- | - | When using the "sendmail" driver to send e-mails, we will need to know - | the path to where Sendmail lives on this server. A default path has - | been provided here, which will work well on most of your systems. + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! | */ - 'sendmail' => '/usr/sbin/sendmail -bs', + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], ]; diff --git a/config/queue.php b/config/queue.php index 549322e..4d83ebd 100644 --- a/config/queue.php +++ b/config/queue.php @@ -7,7 +7,7 @@ | Default Queue Driver |-------------------------------------------------------------------------- | - | The Laravel queue API supports a variety of back-ends via an unified + | Laravel's queue API supports an assortment of back-ends via a single | API, giving you convenient access to each back-end using the same | syntax for each one. Here you may set the default queue driver. | diff --git a/config/view.php b/config/view.php index e193ab6..2acfd9c 100644 --- a/config/view.php +++ b/config/view.php @@ -14,7 +14,7 @@ */ 'paths' => [ - realpath(base_path('resources/views')), + resource_path('views'), ], /* diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index c9de6ea..0000000 --- a/gulpfile.js +++ /dev/null @@ -1,19 +0,0 @@ -const elixir = require('laravel-elixir'); - -require('laravel-elixir-vue-2'); - -/* - |-------------------------------------------------------------------------- - | Elixir Asset Management - |-------------------------------------------------------------------------- - | - | Elixir provides a clean, fluent API for defining some basic Gulp tasks - | for your Laravel application. By default, we are compiling the Sass - | file for your application as well as publishing vendor resources. - | - */ - -elixir((mix) => { - mix.sass('app.scss') - .webpack('app.js'); -}); diff --git a/package.json b/package.json index f4f49c8..630a244 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,21 @@ { "private": true, "scripts": { - "prod": "gulp --production", - "dev": "gulp watch" + "dev": "npm run development", + "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "watch-poll": "npm run watch -- --watch-poll", + "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", + "prod": "npm run production", + "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" }, "devDependencies": { + "axios": "^0.16.2", "bootstrap-sass": "^3.3.7", - "gulp": "^3.9.1", - "jquery": "^3.1.0", - "laravel-elixir": "^6.0.0-14", - "laravel-elixir-vue-2": "^0.2.0", - "laravel-elixir-webpack-official": "^1.0.2", - "lodash": "^4.16.2", - "vue": "^2.0.1", - "vue-resource": "^1.0.3" + "cross-env": "^5.0.1", + "jquery": "^3.1.1", + "laravel-mix": "^1.0", + "lodash": "^4.17.4", + "vue": "^2.1.10" } } diff --git a/phpunit.xml b/phpunit.xml index 712e0af..9ecda83 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -9,8 +9,12 @@ processIsolation="false" stopOnFailure="false"> - - ./tests + + ./tests/Feature + + + + ./tests/Unit diff --git a/resources/assets/js/bootstrap.js b/resources/assets/js/bootstrap.js index a2f3529..8e0f04e 100644 --- a/resources/assets/js/bootstrap.js +++ b/resources/assets/js/bootstrap.js @@ -7,29 +7,35 @@ window._ = require('lodash'); * code may be modified to fit the specific needs of your application. */ -window.$ = window.jQuery = require('jquery'); -require('bootstrap-sass'); +try { + window.$ = window.jQuery = require('jquery'); + + require('bootstrap-sass'); +} catch (e) {} /** - * Vue is a modern JavaScript library for building interactive web interfaces - * using reactive data binding and reusable components. Vue's API is clean - * and simple, leaving you to focus on building your next great project. + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. */ -window.Vue = require('vue'); -require('vue-resource'); +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; /** - * We'll register a HTTP interceptor to attach the "CSRF" header to each of - * the outgoing requests issued by this application. The CSRF middleware - * included with Laravel will automatically verify the header's value. + * Next we will register the CSRF Token as a common header with Axios so that + * all outgoing HTTP requests automatically have it attached. This is just + * a simple convenience so we don't have to attach every token manually. */ -Vue.http.interceptors.push((request, next) => { - request.headers.set('X-CSRF-TOKEN', Laravel.csrfToken); +let token = document.head.querySelector('meta[name="csrf-token"]'); - next(); -}); +if (token) { + window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; +} else { + console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token'); +} /** * Echo exposes an expressive API for subscribing to channels and listening @@ -37,7 +43,9 @@ Vue.http.interceptors.push((request, next) => { * allows your team to easily build robust real-time web applications. */ -// import Echo from "laravel-echo" +// import Echo from 'laravel-echo' + +// window.Pusher = require('pusher-js'); // window.Echo = new Echo({ // broadcaster: 'pusher', diff --git a/routes/channels.php b/routes/channels.php new file mode 100644 index 0000000..f16a20b --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,16 @@ +id === (int) $id; +}); diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php new file mode 100644 index 0000000..547152f --- /dev/null +++ b/tests/CreatesApplication.php @@ -0,0 +1,22 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/tests/ExampleTest.php b/tests/Feature/ExampleTest.php similarity index 58% rename from tests/ExampleTest.php rename to tests/Feature/ExampleTest.php index 2f2d20f..486dc27 100644 --- a/tests/ExampleTest.php +++ b/tests/Feature/ExampleTest.php @@ -1,5 +1,8 @@ visit('/') - ->see('Laravel'); + $response = $this->get('/'); + + $response->assertStatus(200); } } diff --git a/tests/TestCase.php b/tests/TestCase.php index 8208edc..2932d4a 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -1,25 +1,10 @@ make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); +use Illuminate\Foundation\Testing\TestCase as BaseTestCase; - return $app; - } +abstract class TestCase extends BaseTestCase +{ + use CreatesApplication; } diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php new file mode 100644 index 0000000..5663bb4 --- /dev/null +++ b/tests/Unit/ExampleTest.php @@ -0,0 +1,20 @@ +assertTrue(true); + } +} diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100644 index 0000000..72fdbb1 --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,15 @@ +let mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel application. By default, we are compiling the Sass + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/assets/js/app.js', 'public/js') + .sass('resources/assets/sass/app.scss', 'public/css');