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