Follow along with the video below to see how to install our site as a web app on your home screen.
Бележка: This feature may not be available in some browsers.
От месеци насам и на мен ми е дошло на ум да почна разработка на форум, подобен на този (говорим само за /discuss). Иска ми се да е насочен само към българските Laravel разработчици и да си помагаме взаимно. Не е кой знае какво - ларавел ти предоставя напълно готова система за логин и регистър (и не само), а останалото са постове, отговори, отговори на отговори...дребни неща... Като се замисля е това (Като изключим излишните функции)И на мен ми идват в повечко тези реакции, споделяния и лайкове на постове, модераторски панели, съобщения между потребители, докладвания, рожденни дни и т.н., за това няма да е лошо да се разработи нещо базово, върху което да се надгражда (ако е нужно - в нашият случай, по-скоро не).
Пожелавам ти успех и дано се получи нещо готино![]()
Здравейте отново! Не съм направил кой знае колко още по форумчето, тъй като не ми остава време. От друга страна пък закупих домейн и droplet от digitalocean, но проблемът е, че нещо не ми се получава setup-а на сървъра. Нека спомена, че за първи път конфигурирам сървър. През последните 3 часа от 4 опита - 4 неуспешни, все нещо изкача като грешка и директно rebuild-вам droplet-a и започвам наново. Имам следният въпрос - някой по-запознат в тази сфера ще може да ми даде насоки и като цяло да помогне да вдигнем сървъра, предполагам, че за професионалист няма да отнеме повече от 20-30 минути. Ще съм изключително благодарен. Поздрави!
Сървъра:
1 GB Memory / 1 Intel vCPU / 25 GB Disk / AMS3 - Ubuntu 18.04 (LTS) x64
П.С: Няма да издавам все още домейна, но ще ви хареса (надявам се)![]()
Точно на нея ми бяха неуспешните опити. Разбрах за larasail и мисля, че всичко е наред в момента.Следвай документацията на DO.
![]()
How to Install and Configure Nginx on Ubuntu | Step-by-Step Guide | DigitalOcean
Learn how to install and configure Nginx on Ubuntu with this step-by-step guide. Set up a web server, enable firewall rules, and optimize Nginx performance.www.digitalocean.com
Точно на нея ми бяха неуспешните опити. Разбрах за larasail и мисля, че всичко е наред в момента.
Ти не каза какви грешки изкачат. Ние как да знаем какво може да се дъни? От права на папки (конфигурация на сървъра на ниско ниво) до конфигурация на самия апп има голям гап.Здравейте отново! Не съм направил кой знае колко още по форумчето, тъй като не ми остава време. От друга страна пък закупих домейн и droplet от digitalocean, но проблемът е, че нещо не ми се получава setup-а на сървъра. Нека спомена, че за първи път конфигурирам сървър. През последните 3 часа от 4 опита - 4 неуспешни, все нещо изкача като грешка и директно rebuild-вам droplet-a и започвам наново. Имам следният въпрос - някой по-запознат в тази сфера ще може да ми даде насоки и като цяло да помогне да вдигнем сървъра, предполагам, че за професионалист няма да отнеме повече от 20-30 минути. Ще съм изключително благодарен. Поздрави!
Сървъра:
1 GB Memory / 1 Intel vCPU / 25 GB Disk / AMS3 - Ubuntu 18.04 (LTS) x64
П.С: Няма да издавам все още домейна, но ще ви хареса (надявам се)![]()
<?php
namespace App\Traits;
use Illuminate\Support\Str;
trait CreateUuid
{
/**
* Override the boot function from Laravel so that
* we give the model a new UUID when we create it.
*/
protected static function boot()
{
parent::boot();
$creationCallback = function ($model) {
if (empty($model->{$model->getKeyName()}))
{
$model->uuid = Str::uuid()->toString();
}
};
static::creating($creationCallback);
}
}
<?php
namespace App\Traits;
trait UseUuid
{
public function getRouteKeyName()
{
return 'uuid';
}
}
Защо? Искаш да кажеш, че горните парчета код, които трябва да приложиш в Ларавел са нещо хубаво и се радваш, че ги има като опция?... добре че не си се заел със Симфонията.
разкарай тея NFT скамове и маймуни - като че ли, юзърите сме идиоти и с акъла на маймуни. Точно тея NFT-та, с маймуните, са пример за глупост и слабоумие сред ползващите ги. Един вид юзърите ги имаш с един акъл като ейповете.
Махни и капчата - все пак тая капча стои зад Auth - няма да я наспамят - къстом е, не знаят програмите като scrapebox какво да търсят и къде да пращат формата.
За форума - то е ясно, че го оправяш още като вид - публикувано / публикувано от - махай ги тез работи, датата да си стои само, и публични профили да могат да се виждат, и някое друго поле за юзърите - да кажем website url - че да събереш регистрации от seo хора, може пък и да напишат нещо.
И softDeletes на всичко - задължително - и използвай uuid-та , вместо id-та, че се exposevat, с тези два трейта после е много удобно - e трябва и моделите да имат uuid пропърти ( $table('uuid')->uuid(); в миграцията ) , горното ще ти създава uuid автоматично, само трябва да го use-неш в модела, дето ще работиш с uuid, пък второто като го викнеш в Модела - няма да ползва id-то за Find:: и елокуент, а ще ползва uuid филда -
И я чукни контролера да го погледна
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post;
use App\Models\Category;
use App\Models\User;
class PostController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$categories = Category::get();
$posts = Post::latest()->with('category', 'user')->withCount('replies')
->when($request->category, function ($query, $category) {
$query->where('category_id', '=', $category);
})
->when($request->status, function($builder, $status) {
$builder->when($status == 1, function($query) use ($status) {
$query->whereNotNull('best_reply_id');
})->when($status == 2, function($query) use ($status) {
$query->whereNull('best_reply_id');
});
})
->when($request->fresh, function($builder, $fresh) {
$builder->when($fresh == 1, function($query) use ($fresh) {
$query->whereHas('replies');
})->when($fresh == 2, function($query) use ($fresh) {
$query->doesntHave('replies');
});
})
->simplePaginate(5);
return view('website.post.index', [
'posts' => $posts,
'categories' => $categories
]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$rand = mt_rand(1, count(config('recaptchaQuestions')));
$question = config('recaptchaQuestions')[$rand]['question'];
session()->put('recaptcha-question', $rand);
return view('website.post.create', [
'categories' => Category::all(),
'question' => $question
]);
}
/**
* Store a newly created resource in storage.
*
* @param \App\Http\Requests\StorePostRequest $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'category_id' => 'required|exists:categories,id',
'title' => 'required|min:5|max:100',
'content' => 'required|min:10|max:5000'
]);
$request->merge([
'user_id' => auth()->user()->id,
'slug' => \Str::slug($request->title),
'best_reply_id' => null
]);
$answer = config('recaptchaQuestions')[session()->get('recaptcha-question')]['answer'];
if(!in_array(str_replace(' ', '', $request->answer), $answer)) {
$errors = new \Illuminate\Support\MessageBag();
$errors->add('answer', 'Отговорът на въпроса не е правилен!');
return back()->withInput()->withErrors($errors);
}
if(Post::where('slug', $request->slug)->exists()) {
$request->merge([
'slug' => $request->slug . "-" . (substr((ord($request->slug)), 0, 2) + mt_rand(1, 173)),
]);
}
if(Post::create($request->all())) {
User::find(auth()->user()->id)->increment('points', config('points.create_thread'));
flash('Успешно добавихте поста!', 'success');
return redirect()->route('posts.index');
} else {
return back();
}
}
/**
* Display the specified resource.
*
* @param \App\Models\Post $post
* @return \Illuminate\Http\Response
*/
public function show(Post $post)
{
$post->increaseViews($post);
$post->load('category', 'user', 'replies')->loadCount('replies');
$post->replies->load('user');
return view('website.post.show', [
'post' => $post
]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Post $post
* @return \Illuminate\Http\Response
*/
public function edit(Post $post)
{
if(auth()->user()->id != $post->user_id) return back();
$rand = mt_rand(1, count(config('recaptchaQuestions')));
$question = config('recaptchaQuestions')[$rand]['question'];
session()->put('recaptcha-question-edit', $rand);
return view('website.post.edit', [
'post' => $post,
'categories' => Category::all(),
'question' => $question
]);
}
/**
* Update the specified resource in storage.
*
* @param \App\Http\Requests\UpdatePostRequest $request
* @param \App\Models\Post $post
* @return \Illuminate\Http\Response
*/
public function update(Post $post, Request $request)
{
if(auth()->user()->id != $post->user_id) return back();
$request->validate([
'category_id' => 'required|exists:categories,id',
'title' => 'required|min:5|max:100',
'content' => 'required|min:10|max:5000'
]);
$request->merge([
'user_id' => auth()->user()->id,
'slug' => $post->slug,
'best_reply_id' => null
]);
$answer = config('recaptchaQuestions')[session()->get('recaptcha-question-edit')]['answer'];
if(!in_array(str_replace(' ', '', $request->answer), $answer)) {
$errors = new \Illuminate\Support\MessageBag();
$errors->add('answer', 'Отговорът на въпроса не е правилен!');
return back()->withInput()->withErrors($errors);
}
if(Post::find($post->id)->update($request->all())) {
flash('Успешно редактирахте темата си!', 'success');
} else {
flash('Не можахме да редактираме вашата тема в момента. Моля, опитайте по-късно!', 'error');
}
return redirect()->route('posts.show', ['post' => $post->slug]);
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Post $post
* @return \Illuminate\Http\Response
*/
public function destroy(Post $post)
{
if($post->created_at < now()->subDays(2)) return back();
$post->update([
'best_reply_id' => null
]);
foreach($post->replies as $reply) {
$reply->delete();
}
if($post->delete()) {
flash('Успешно изтрихте темата!', 'success');
return redirect()->route('posts.index');
} else {
flash('Не успяхме да изтрием темата. Моля, опитайте отново!', 'error');
return back();
}
}
}
$foo = 'Laravel-Bulgaria';
$foo='Laravel-Bulgaria';
$foo="Laravel-Bulgaria";
че даже иСупер досадно ще е ако трябва да попълваш някакви такива капча глупости всеки път като искаш да постнеш нещо.. - освен това не работи правилно и трябва да гадаеш кой е правилния отговорВсички от долните примерни би трябвало да те пускат да преминеш капчата...
PHP:$foo = 'Laravel-Bulgaria'; $foo='Laravel-Bulgaria'; $foo="Laravel-Bulgaria";
Също контейнерите на различните места са с различна ширина.
$foo = "Laravel-Bulgaria";
3 => [
'question' => 'Как ще създадете PHP променлива $foo, в която да съхраните "' . config('app.name') . '"?',
'answer' => [
'$foo="' . config('app.name') . '";',
'$foo=\'' . config('app.name') . '\';'
]
]