İngilizceniz orta seviye ise ve laravel/php konusunda tecrübeniz varsa, direk dökümanı inceleyin. Size bu iş için yol gösterecek en değerli kaynaklardan birisi dökümandır.
https://laravel.com/docs/5.7/packages
Local'de paket geliştirirken aşağıdaki şekilde çalışabilirsiniz ve geliştirdiğiniz paketleri copy/paste yaparak yine aşağıdaki şekilde projelerinize dahil edebilirsiniz. Local'den repo eklemek için "repositories" bölümünde lokal repomuzu ekleyip, require bölümünde projemize dahil ediyoruz. Repolar github, bitbucket, üzerinden, zip olarak vb yöntemlerle eklenebilir.
- repositories içerisindeki symlink önemlidir, vendor klasörünün içerisine link olarak klasörü ekler.
- Admin panelde kullanılan Css, js gibi dosyalarınızı laravelin publish yöntemleri ile ilgili klasörlere publish edebilir yada link olarak public klasöründe yayınlayabilirsiniz.
- Uzun süredir şirket içerisinde bütün laravel projelerimizi aşağıdaki şekilde paket olarak geliştiriyoruz.
https://getcomposer.org/doc/05-repositories.md
Laravel projenizin composer.json dosyası;
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"type": "project",
"repositories": {
"arsiv": {
"type": "path",
"url": "herkod/arsiv",
"options": {
"symlink": true
}
}
},
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"herkod/arsiv": "dev-master",
"laravel/framework": "5.7.*",
"laravel/tinker": "^1.0"
},
"require-dev": {
"beyondcode/laravel-dump-server": "^1.0",
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0"
},
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
},
"minimum-stability": "dev",
"prefer-stable": true
}
Paketinizin composer.json dosyası;
{
"name": "herkod/arsiv",
"description": "News Archive Management System",
"type": "laravel application",
"authors": [
{
"name": "Herkod Inc.",
"email": "info@herkod.com"
}
],
"require": {
"barryvdh/laravel-cors": "^0.11.0",
"laravel/passport": "^6.0",
"spatie/laravel-permission": "^2.14",
"spatie/laravel-tags": "^2.1",
"barryvdh/laravel-elfinder": "^0.4.1"
},
"autoload": {
"psr-4": {
"Herkod\\": "src/",
"Herkod\\Seeds\\": "database/seeds/"
}
},
"minimum-stability": "dev",
"prefer-stable": true,
"extra": {
"laravel": {
"providers": [
"Herkod\\AppServiceProvider"
],
"aliases": {}
}
}
}
Bizim yapımızda kullandığımız örnek ServiceProvider;
<?php
namespace Herkod;
use Illuminate\Support\ServiceProvider;
use Illuminate\Routing\Router;
use Broadcast;
use Response;
use Schema;
use Route;
class AppServiceProvider extends ServiceProvider
{
public function boot(Router $router)
{
#Sucucudaki "Specified key was too long; max key length is 767 bytes" hatası için;
Schema::defaultStringLength(191);
# Artisan komutumuzu kayıt ediyoruz.
$this->commands([
\Herkod\Common\Console\Commands\HerkodUp::class,
]);
# Migration dosyalarımızı yüklüyoruz.
$this->loadMigrationsFrom(__DIR__.'/../database/migrations');
# Varsa Language dosyalarımızı yüklüyoruz.
$this->loadTranslationsFrom(__DIR__.'/../lang', 'herkod');
Response::macro('success', function ($data, $message = '') {
return Response::json([
'success' => true,
'message' => $message,
'data' => $data,
]);
});
$router->aliasMiddleware('role', \Spatie\Permission\Middlewares\RoleMiddleware::class);
$router->aliasMiddleware('permission', \Spatie\Permission\Middlewares\PermissionMiddleware::class);
Route::prefix('api')
->middleware('api')
->namespace('Herkod')
->group(__DIR__.'/routes.php');
Broadcast::routes();
require(__DIR__.'/helper.php');
}
public function register()
{
if (env('PUBLIC_PATH') !== null) {
$this->app['path.public'] = base_path() . env('PUBLIC_PATH');
}
}
}
Yukarıdaki composer dosyalarının laravel içerisinde hiyerarşisi;