Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Безопасность кода » 01.04.2018 14:59:53

Всё отлично. Вы мне вдвоём очень помогли, еще раз благодарю. Буду реализовывать способ от Proger_XP.

#2 Re: Laravel 5.x » Безопасность кода » 01.04.2018 01:20:46

А если поставить google recaptcha на покупку каждого предмета? Прокатит?

#3 Re: Laravel 5.x » Безопасность кода » 30.03.2018 16:25:20

Огромное спасибо. Действительно возможен дюп. А может быть подскажите как я могу (через какие инструменты) отправить сразу 10 запросов и купить 10 предметов по цене 1?

#4 Re: Laravel 5.x » связать 2 таблицы » 30.03.2018 05:45:37

Если я всё правильно понял должно быть примерно так:
GZNimEY.jpg
Нужна связь многие ко многим (реализуется в промежуточной таблице design), потому что неизвестно точно сколько будет "мебели" в квартире. Мебель - это отдельная сущность, а не свойство квартиры.
Сделаешь по другому и будет избыточная база данных. И еще к примеру ванны могут быть от разных производителей, но сделаны из тех же самых материалов и по весу одинаковые. То есть зачем хранить в базе дублированную информацию?! И так далее, и так далее. Может быть мою модель можно еще усовершенствовать.

#5 Re: Laravel 5.x » Помогите как правельно создать приложение » 30.03.2018 04:04:40

Например вот так:
Zqi6fbl.jpg
Субкатегории будут состоять из:
- Компьютеры
- Программирования
- Сети
- Кардиология
- Хирургия
- Офтальмология
Категории будут состоять из:
- Общей отдел
- Медицина

Всё между собой связано, не избыточно и может быть дополнено новыми категориями или субкатегориями в любой момент.

#7 Laravel 5.x » Безопасность кода » 30.03.2018 02:56:29

Butirator
Ответов: 11

Здравствуйте. Я дописал один из проектов на гитхабе и может быть увидите, где есть уязвимость для любых атак? Заранее спасибо.
Часть из routes:

Route::post( 'shop/purchase/{shop}', 'Front\ShopController@postPurchase' );

Представление:

@foreach( $items as $item )
<form id="item_buy{{$item->id}}" action="{{ url( 'shop/purchase/' . $item->id ) }}" method="post" >
	{!! csrf_field() !!}
	<div class='news'>
		<div class='shop_img'>
			<a href="#"> <img src="{{ asset( File::exists( base_path( 'public/img/icons/' . $item->item_id . '.gif' ) ) ? 'img/icons/' . $item->item_id . '.gif' : 'img/icons/0.gif' ) }}" alt="{{ $item->name }}"></a>
			<br> <br>
			<b>Quantity, pcs.</b><br>
			<input class="count" name="count" type="number" value="1" min="1" max="{{ $item->max_count }}">
			<div></div>
		</div>
		<div class='news_content'>
			<div class='news_title'>
				<a href="#">{{ $item->name }}</a>
			</div>
			<div class='news_text'>
				{!! $item->description !!}
			</div>
			<div class='news_info'>
				Price: <b>{{ $item->price}}</b> {{ settings( 'currency_name' ) }}
			</div>
			<div id="news_button">                
				<a href="#" onclick="if(confirm('Are you sure you want to buy {{$item->name}}?\nYour current character is {{ Auth::user()->characterId() ? Auth::user()->characterName() : 'not selected.' }}.')){document.getElementById('item_buy{{$item->id}}').submit();}">{{ trans( 'shop.buy' ) }}</a>
			</div>
			<noscript>
				<input type="submit" value="{{ trans( 'shop.buy' ) }}" />
			</noscript>
			</span>
		</div>
	</div>
</form>

Метод в контроллере:

public function postPurchase( Request $request, ShopItem $item )
    {
        $validator = Validator::make( $request->all(), [
            'count' => 'required|numeric|min:1|max:9999'
        ]);

        if ( $validator->fails() )
        {
            return redirect( 'shop' )
                ->withErrors( $validator )
                ->withInput();
        }

        $count = $request->input('count');
        $user = Auth::user();
        $item_price = ( $item->discount > 0 ) ? $item->price - ( $item->price / 100 * $item->discount ) : $item->price;
        $item_price = $item_price * $count;
        
        if ( $user->money >= $item_price  )
        {
            if ($item->max_count >= $count)
            {
                $api = new API();
                $mail = array(
                    'title' => trans( 'shop.mail_item.title', ['name' => settings( 'server_name' )] ),
                    'message' => trans( 'shop.mail_item.message', ['name' => $item->name, 'count' => $item->count, 'staff' => settings( 'server_name' )] ),
                    'money' => 0,
                    'item' => array(
                        'id' => $item->item_id,
                        'pos' => 0,
                        'count' => $count,
                        'max_count' => $item->max_count,
                        'data' => $item->octet,
                        'proctype' => $item->protection_type,
                        'expire_date' => $item->expire_date,
                        'guid1' => 0,
                        'guid2' => 0,
                        'mask' => $item->mask,
                    ),
                );
                $api->sendMail( Auth::user()->characterId(), $mail['title'], $mail['message'], $mail['item'], $mail['money'] );
                $user->money = $user->money - $item_price;
                $user->save();
                flash()->success( trans( 'shop.purchase_complete', ['name' => $item->name] ) );
            }
            else
            {
                flash()->error( 'The amount is too large.' );
            }
        }
       
        else
        {
            flash()->error( trans( 'main.not_enough', ['currency' => strtolower( settings( 'currency_name' ) )] ) );
        }
        return redirect()->back();
    }

Основная суть: Пользователь может покупать предметы, которые будут отсылаться в игру. Можно указать количество и, если денег достаточно, они отправляются.

#8 Re: Laravel 5.x » Delayed Jobs » 09.03.2018 01:21:17

code_bright_anywhere, огромное спасибо. Это именно то, что нужно.

#9 Re: Laravel 5.x » Delayed Jobs » 08.03.2018 17:19:17

При выполнении этого метода в режиме debug появляется ошибка

FatalThrowableError in VoteController.php line 69: Fatal error: Call to a member function delay() on boolean

В .env файле выставлено

QUEUE_DRIVER=sync

Может быть для обновления записи в таблице нужно использовать другие команды?!

#10 Laravel 5.x » Delayed Jobs » 08.03.2018 16:57:29

Butirator
Ответов: 5

Здравствуйте. Хочу сделать задержку в выполнении метода в контроллере. Мой код:

$user->money = ( $site->double_rewards ) ? ( $site->reward_amount * 2 ) : $site->reward_amount + $user->money;
$user->save();

В документации приведен пример, что можно сделать так:

$job = (new SendReminderEmail($user))->delay(60 * 5);
$this->dispatch($job);

Далее я попробовал:

$user->money = ( $site->double_rewards ) ? ( $site->reward_amount * 2 ) : $site->reward_amount + $user->money;
$job = ($user->save())->delay(60 * 5);
$this->dispatch($job);

И не получилось. Кто знает как это реализовать правильно? Заранее спасибо.

Подвал раздела