Laravel по-русски

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

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

#1 Laravel 5.x » Как сделать звездный рейтинг? » 12.05.2017 14:41:12

Tarasovych
Ответов: 0

Использую виджет http://demos.krajee.com/widget-details/star-rating
В БД есть поля

rating

и

votes

, чтобы сохранять кол-во голосов, кол-во общего рейтинга, а потом делить общий на кол-во голосов и выводить средний.
Как сохранять результат в БД? Я так понимаю, нужен отдельный роут для голосования, контроллер, а как со вьюхи ловить "клик"? AJAX?
Вот такой инпут есть, но планирую его вынести в отдельный blade, чтобы использовать в разных местах:

<input id="{{$input_id}}" value="{{$rating}}" type="number" class="rating" min=0 max=5 step=0.5 data-size="md">
<script> 
    $('#{{$input_id}}').rating({
        starCaptions: {1: '', 2: '', 3: '', 4: '', 5: ''},
        starCaptionClasses: {1: 'text-danger', 2: 'text-warning', 3: 'text-info', 4: 'text-primary', 5: 'text-success'},
        clearElement: "#kv-clear", 
        captionElement: "#kv-caption"
    }).on("rating.change", function(event, value, caption) {
        
        var voted = false;
        @if (Session::has()//проверка, голосовал ли пользователь
            voted = true;
        @endif
        if (voted)
            swal(":(", "Голосовать можно только один раз!", "warning");
        else{
            var total = value;
            $.ajax({
                url: src,
                method: 'post',
                data: {'total' : total, '_token' : $('input[name=_token]').val()},
                success: function(res){
                    if (res == 1){
                        swal("", "Удачно!", "success");
                        voted = true;
                    }
                    else{
                        swal(":(", "Ошибка!", "warning");
                    }
                }
            });
        }
    });
    $('.clear-rating').hide();
    $('.caption').hide();
</script>

Контроллер:

if (\Session::has())
            return 0;
        if ($request->ajax()) {
            $article = Blog::find();
            $article->rating += $request->total;
            $article->votes = $article->votes + 1;
            $article->save();
            session([$request->path() => 'true']);
            return 1;
        }

#3 Re: Laravel 5.x » Как переназначить роуты? » 29.04.2017 11:06:14

Вот еще обнаружил что:

web                                                                                                                      |
|        | GET|HEAD                       | /admin                                  |                               | App\Http\Controllers\HomeController@index

web                                                                                                                      |
|        | GET|HEAD                       | home                                         |                               | App\Http\Controllers\HomeController@index                                 |

#4 Re: Laravel 5.x » Как переназначить роуты? » 29.04.2017 10:59:53

TrueKanonir пишет:

Может тогда заного установить лару, и перенести туда проект?) работы на 5 мин

Проект под гитом, я хотел бы сохранить историю разработки чисто для себя...

#5 Re: Laravel 5.x » Как переназначить роуты? » 28.04.2017 23:53:30

covobo пишет:

Очень интересно, ssh есть?
Последняя надежда на composer update. Дальше надо ковыряться уже плотней, дебажить.

Да проект на локалке пока. composer update не помог.

#6 Re: Laravel 5.x » Как переназначить роуты? » 28.04.2017 22:34:55

php artisan route:cache
Route cache cleared!


  [LogicException]
  Unable to prepare route [/] for serialization. Uses Closure.

#7 Re: Laravel 5.x » Как переназначить роуты? » 28.04.2017 22:04:10

upd2. может удалить кэш вьюх, где есть упоминание о "/home"?
/storage/framework/sessions - есть пару таких

#8 Re: Laravel 5.x » Как переназначить роуты? » 28.04.2017 21:40:18

AlexeyMezenin пишет:

Все-таки похоже на проблему с кэшем, потому что в файле маршрутов есть очень много resource, которых нет в списке route:list. Проверь, может у тебя есть еще файлы с маршрутами? Очисти всю папку /bootstrap/cache вручную.

Вспомни, может ты отредактировал RouteServiceProvider ради какого-нибудь пакета или сделал что-то подобное. И еще, ты апгрейдил Laravel или это была чистая установка?

По поводу resources - я просто не все роуты скопировал в сообщение (не скопировал те, которые были созданы после появления проблемы - в частности клиентские). Больше файлов с маршрутами нету. Ларавель чистый ставил (5.2). Попробую очистить папку кэш. RouteServiceProvider тоже не трогал.
upd. почистил - не помогло. хоть бери и делай заново проект(
Возможно проблема из-за неправильного навешивание RBAC (делал по примеру статьи)

#9 Re: Laravel 5.x » Как переназначить роуты? » 27.04.2017 23:35:19

covobo пишет:

Ради интереса - если ты меняешь action у роута, команда все равно php artisan route:list  отобразит App\Http\Controllers\HomeController@index  ?

Проверил, да, отобразит старый.

covobo пишет:

По поводу файла - @AlexeyMezenin попросил тебя показать весь файл роутов, а не bootstrap/cache/routes.php.
Возможно роут где-то переопределяется.

Route::get('/', function () {
    return view('welcome');
});

Route::auth();

Route::group(['middleware' => ['auth']], function () {

    Route::group(['prefix' => 'admin'], function () {
        Route::get('/', 'HomeController@index');

        Route::resource('/users', 'UserController');
        Route::resource('/roles', 'RoleController');
        Route::resource('/blog', 'BlogController');
        Route::resource('/blogcategory', 'BlogCategoryController');
        Route::resource('/servicecategory', 'ServiceCategoryController');
        Route::resource('/service', 'ServiceController');
        Route::resource('/meta', 'MetaController');
    });
});

#10 Re: Laravel 5.x » Как переназначить роуты? » 27.04.2017 21:06:07

AlexeyMezenin пишет:

Попробуй вручную удалить файл bootstrap/cache/routes.php, если он есть.

Если нет или не помогло, покажи пожалуйста весь файл маршрутов и весь результат php artisan route:list

Файла нету такого(

+--------+--------------------------------+----------------------------------------------+-------------------------------+---------------------------------------------------------------------------+-
-------------------------------------------------------------------------------------------------------------------------+
| Domain | Method                         | URI                                          | Name                          | Action                                                                    |
Middleware                                                                                                               |
+--------+--------------------------------+----------------------------------------------+-------------------------------+---------------------------------------------------------------------------+-
-------------------------------------------------------------------------------------------------------------------------+
|        | GET|HEAD                       | /                                            |                               | Closure                                                                   |
web                                                                                                                      |
|        | GET|HEAD                       | admin                                        |                               | App\Http\Controllers\HomeController@index                                 |
web,auth                                                                                                            |
|        | GET|HEAD                       | home                                         |                               | App\Http\Controllers\HomeController@index                                 |
web,auth                                                                                                                 |
|        | GET|HEAD                       | login                                        |                               | App\Http\Controllers\Auth\AuthController@showLoginForm                    |
web,guest                                                                                                                |
|        | POST                           | login                                        |                               | App\Http\Controllers\Auth\AuthController@login                            |
web,guest                                                                                                                |
|        | GET|HEAD                       | logout                                       |                               | App\Http\Controllers\Auth\AuthController@logout                           |
web                                                                                                                      |
|        | POST                           | password/email                               |                               | App\Http\Controllers\Auth\PasswordController@sendResetLinkEmail           |
web,guest                                                                                                                |
|        | POST                           | password/reset                               |                               | App\Http\Controllers\Auth\PasswordController@reset                        |
web,guest                                                                                                                |
|        | GET|HEAD                       | password/reset/{token?}                      |                               | App\Http\Controllers\Auth\PasswordController@showResetForm                |
web,guest                                                                                                                |
|        | GET|HEAD                       | register                                     |                               | App\Http\Controllers\Auth\AuthController@showRegistrationForm             |
web,guest                                                                                                                |
|        | POST                           | register                                     |                               | App\Http\Controllers\Auth\AuthController@register                         |
web,guest                                                                                                                |                                                                                                                    |
+--------+--------------------------------+----------------------------------------------+-------------------------------+---------------------------------------------------------------------------+-
-------------------------------------------------------------------------------------------------------------------------+

#11 Re: Laravel 5.x » Как переназначить роуты? » 27.04.2017 02:12:20

AlexeyMezenin пишет:

Проблема в том, что при вызове php artisan route:list видишь home вместо admin? Если так, что почисти кэш php artisan route:clear и убедись, что команда не вернула ошибку.

В том то и дело, что ошибки нету

#12 Laravel 5.x » Как переназначить роуты? » 26.04.2017 09:10:41

Tarasovych
Ответов: 17

Проблема следующая:
код routes.php (5.2):

Route::auth();

Route::group(['middleware' => ['auth']], function () {

    Route::group(['prefix' => 'admin'], function () {
        Route::get('/', 'HomeController@index');

консоль:

web                                                                                                                      |
|        | GET|HEAD                       | home                                         |                               | App\Http\Controllers\HomeController@index                                 |

контроллер:

public function index()
    {
        return view('admin');
    }

Раньше было вместо admin - home, где, в теории, я еще не переназначил правильно?
п. с. куки путией тоже чистил

#13 Laravel 5.x » Как автоматически инициализировать composer при запуске PHPStorm? » 25.04.2017 21:47:21

Tarasovych
Ответов: 0

При открытии любого проекта получаю сообщение

Composer: Composer configuration file found. Initialize Composer settings? Do not ask again.

Каждый раз инициализирую вручную, при том, что в настройках выставлен дефолтный интерпритатор PHP и путь к .phar в папке с одноименной версие PHP.
Путь к .json указан в папке с текущим проектом.

#14 Re: Laravel 5.x » Как навесить маску на input? » 24.04.2017 17:34:27

mavsan пишет:

Нет, не нужна дополнительная инициализация. phone тоже должно быть в кавычках:

{!! Form::number('phone', null, array('class' => 'form-control', 'id'=>'phone')) !!}

Спасибо, буду пробовать!

#15 Laravel 5.x » Как навесить маску на input? » 23.04.2017 14:14:19

Tarasovych
Ответов: 2

Есть поле:

{!! Form::number('phone', null, array('class' => 'form-control', 'id'=>phone)) !!}

Можно ли на него навесить маску вида:

$(document).ready(function(){
  $('#phone').mask('0000-0000');
});

Правильно ли это сделано?
Моя версия:

{!! Form::number('phone', null, array('class' => 'form-control', 'id'=>phone)) !!}
@section('mask')
<script>
$(document).ready(function(){
  $('#phone').mask('0000-0000');
});
</script>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

@endsection

Нужна ли инициализая jquery допольнительно?

#16 Re: Laravel 5.x » Resize изображений только для view » 23.04.2017 13:44:59

AlexeyMezenin пишет:

Попробуй так:

Html::image('image.jpg', null, ['style' => 'height: 50%'])

Лучше, конечно же, это в стили вывести и сделать:

['class' => 'some-image-class']

Спасибо!

#17 Re: Laravel 5.x » Resize изображений только для view » 23.04.2017 13:04:33

Можно ли в хелпер просто дописать 'style'=>'height:50%'?
upd так и сделал, тему можно удалить

#18 Laravel 5.x » Resize изображений только для view » 23.04.2017 12:44:30

Tarasovych
Ответов: 9

Если изображение сохраняется на сервер в разрешении 500х500, а для некоторой view нужно вывести его же 50х50, как это лучше сделать?
Думаю ресайзить два раза и сохранять в двух папках не лучший вариант?
Или лучше средствами css выводить уменшенное?
Сейчас для вывода использую хелпер:

{{ Html::image() }}

#19 Re: Laravel 5.x » Как передать в вид данные из двух связанных моделей? » 22.04.2017 20:46:15

AlexeyMezenin пишет:

Тут одной ссылкой не отделаешься, нужно прочитать всю документацию. Договоренности есть везде - в моделях, маршрутах, контроллерах и пр. Начни с чтения доков об Eloquent и отношениях:

https://laravel.ru/docs/v5/eloquent
https://laravel.ru/docs/v5/eloquent-relationships

Еще вопрос вдогонку: вышеприведенным способом можно (и нужно?) выводить, к примеру, авторов статьи (на такой же странице, где статей много, и возле каждой нужно указать автора) и т. д.?

#20 Re: Laravel 5.x » Как передать в вид данные из двух связанных моделей? » 22.04.2017 19:54:56

AlexeyMezenin пишет:

Но вообще, намного лучше следовать договоренностям, в таком случае кода будет в разы меньше. В этом вся прелесть Laravel.

Не нашел в документации.. Можно ссылку?

#21 Re: Laravel 5.x » Как передать в вид данные из двух связанных моделей? » 22.04.2017 19:53:01

AlexeyMezenin пишет:

А, у тебя ключ не соответствует отношению, поэтому нужно его вручную добавить:

public function file()
{
    return $this->belongsTo(File::class, 'image_id');
}

Спасибо! Работает! Сейчас выводит просто название файла.
Сделал вот так:

<td>{{ Html::image('images/' . $user->file->link) }}</td>

#22 Re: Laravel 5.x » Как передать в вид данные из двух связанных моделей? » 22.04.2017 19:45:39

AlexeyMezenin пишет:

Если не у всех пользователей есть изображение, то добавь проверку:

<td>{{ is_null($user->file) ? 'no image' : $user->file->link }}</td>

Или то же самое, но с помощью @if

Ну у меня чистая БД, я создал 2 пользователя, судя по БД, изображение у них есть, оно есть так же в файлах проекта. Возможно, проблема в контроллере. Название изображения, идентичное файлу на сервере хранится в поле "link" в таблице "file"

#23 Re: Laravel 5.x » Как передать в вид данные из двух связанных моделей? » 22.04.2017 19:39:16

AlexeyMezenin пишет:

Интересно посмотреть как раз relations, там должен быть объект file

"file" => null
Ага..

#24 Re: Laravel 5.x » Как передать в вид данные из двух связанных моделей? » 22.04.2017 19:38:18

Tarasovych пишет:
AlexeyMezenin пишет:

Покажи что выдает dd($users)

LengthAwarePaginator {#272 ▼
  #total: 2
  #lastPage: 1
  #items: Collection {#273 ▼
    #items: array:2 [▼
      0 => User {#270 ▶}
      1 => User {#271 ▶}
    ]
  }
  #perPage: 5
  #currentPage: 1
  #path: "http://site/admin/users"
  #query: []
  #fragment: null
  #pageName: "page"
}

апд:
массив пользователя

...
0 => User {#270 ▼
        #fillable: array:9 [▶]
        #hidden: array:2 [▶]
        #connection: null
        #table: null
        #primaryKey: "id"
        #keyType: "int"
        #perPage: 15
        +incrementing: true
        +timestamps: true
        #attributes: array:14 [▶]
        #original: array:14 [▶]
        #relations: array:1 [▶]
        #visible: []
        #appends: []
        #guarded: array:1 [▶]
        #dates: []
        #dateFormat: null
        #casts: []
        #touches: []
        #observables: []
        #with: []
        #morphClass: null
        +exists: true
        +wasRecentlyCreated: false
      }

В

#attributes

есть нужный

image_id

#25 Re: Laravel 5.x » Как передать в вид данные из двух связанных моделей? » 22.04.2017 19:28:22

AlexeyMezenin пишет:

Покажи что выдает dd($users)

LengthAwarePaginator {#272 ▼
  #total: 2
  #lastPage: 1
  #items: Collection {#273 ▼
    #items: array:2 [▼
      0 => User {#270 ▶}
      1 => User {#271 ▶}
    ]
  }
  #perPage: 5
  #currentPage: 1
  #path: "http://site/admin/users"
  #query: []
  #fragment: null
  #pageName: "page"
}

апд:
массив пользователя

...
0 => User {#270 ▼
        #fillable: array:9 [▶]
        #hidden: array:2 [▶]
        #connection: null
        #table: null
        #primaryKey: "id"
        #keyType: "int"
        #perPage: 15
        +incrementing: true
        +timestamps: true
        #attributes: array:14 [▶]
        #original: array:14 [▶]
        #relations: array:1 [▶]
        #visible: []
        #appends: []
        #guarded: array:1 [▶]
        #dates: []
        #dateFormat: null
        #casts: []
        #touches: []
        #observables: []
        #with: []
        #morphClass: null
        +exists: true
        +wasRecentlyCreated: false
      }

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