1. Stwórz model
php artisan make:model Company -m
wynik
INFO Model [app/Models/Company.php] created successfully. INFO Migration [database/migrations/2024_04_21_085712_create_companies_table.php] created successfully.
Zobacz całość
Od razu po ściągnięciu nowego Laravela nie da się uruchomić strony bo system nie znajduje tabeli sessions w bazie.
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'sessions' doesn't exist
Można:
1. Wykonać migracje i utworzyć tabelę z sesjami
2. Wyłączyć zapisywanie sesji w bazie:
vim .env
SESSION_DRIVER=database -> SESSION_DRIVER=file
php artisan make:model Post
Model "Post" domyślnie odnosi się do tabeli "posts" w bazie.
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Post extends Model { // use HasFactory; }
W kontrolerze można odwoływać się do funkcji dziedziczonych z Eloquent\Model:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Post; class PostController extends Controller { public function index() { $posts = Post::all(); return view('pages/posts', ['posts' => $posts]); } }
W linii poleceń przechodzimy do głównego katalogu strony i wpisujemy:
php artisan make:migration create_posts_table
Następnie edytujemy wygenerowany plik i dopisujemy własne pola:
vim database/migrations/2023_04_25_131201_create_posts_table.php
... Schema::create('posts', function (Blueprint $table) { $table->bigIncrements('id'); //auto increment $table->string('title',500); $table->string('type',20)->nullable(); $table->string('image',200)->nullable(); $table->text('content')->nullable(); $table->tinyInteger('active')->nullable()->default(1); $table->timestamp('date_create')->useCurrent(); $table->timestamps(); }); ...
Następnie uruchamiamy migrację dla pojedynczej tabeli:
php artisan migrate --path=database/migrations/2023_04_25_131201_create_posts_table.php
lub dla wszystkich tabel:
php artisan migrate
Źródło: https://stackoverflow.com/questions/45473624/laravel-migrate-specific-files-from-migrations
Po utworzeniu nowego kontrolera PostController.php nie da się go wywołać.
php artisan make:controller PostController
Zwracany jest jedynie błąd:
Target class [PostController] does not exist.
Rozwiązanie:
vim app/Http/Providers/RouteServiceProvider.php
class RouteServiceProvider extends ServiceProvider { public const HOME = '/home'; protected $namespace = 'App\Http\Controllers'; //dodane ... Route::middleware('web') ->namespace($this->namespace) //dodane ->group(base_path('routes/web.php')); ...
Źródło: https://www.nicesnippets.com/blog/laravel-8-target-class-postcontroller-does-not-exist-solved
composer create-project laravel/laravel example-app
or if you want to install specific version
composer create-project laravel/laravel:10.x example-app
copy index.php and .htaccess from public to root
cp /home/www/laravel/public/index.php /home/www/laravel/index.php cp /home/www/laravel/public/.htaccess /home/www/laravel/.htaccess
vim /home/www/laravel/index.php
... if (file_exists($maintenance = __DIR__ . '/storage/framework/maintenance.php')) { require $maintenance; } ... require __DIR__ . '/vendor/autoload.php'; ... $app = require_once __DIR__ . '/bootstrap/app.php'; ...
vim config/app.php
'url' => env('APP_URL', 'http://localhost/laravel') #pierwszy parametr jest pobierany z pliku .env a drugi to default jeśli w .env nie ma takiej zmiennej
Odwołanie do zmiennych w configu
<?php echo config('app.url'); #pierwsza część "app" to nazwa pliku config a druga to nazwa zmiennej ?>
Wyświetlenie zmiennej w widoku
{{ $post['content'] }} #wyświetla jako surowy tekst {!! $post['content'] !!} #wyświetla jako HTML
Źródło: https://laravel.com/docs/9.x