Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Использую виджет 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;
}
bump, вдруг кто знает решение
Вот еще обнаружил что:
web |
| | GET|HEAD | /admin | | App\Http\Controllers\HomeController@index
web |
| | GET|HEAD | home | | App\Http\Controllers\HomeController@index |
Может тогда заного установить лару, и перенести туда проект?) работы на 5 мин
Проект под гитом, я хотел бы сохранить историю разработки чисто для себя...
Очень интересно, ssh есть?
Последняя надежда на composer update. Дальше надо ковыряться уже плотней, дебажить.
Да проект на локалке пока. composer update не помог.
php artisan route:cache
Route cache cleared!
[LogicException]
Unable to prepare route [/] for serialization. Uses Closure.
upd2. может удалить кэш вьюх, где есть упоминание о "/home"?
/storage/framework/sessions - есть пару таких
Все-таки похоже на проблему с кэшем, потому что в файле маршрутов есть очень много resource, которых нет в списке route:list. Проверь, может у тебя есть еще файлы с маршрутами? Очисти всю папку /bootstrap/cache вручную.
Вспомни, может ты отредактировал RouteServiceProvider ради какого-нибудь пакета или сделал что-то подобное. И еще, ты апгрейдил Laravel или это была чистая установка?
По поводу resources - я просто не все роуты скопировал в сообщение (не скопировал те, которые были созданы после появления проблемы - в частности клиентские). Больше файлов с маршрутами нету. Ларавель чистый ставил (5.2). Попробую очистить папку кэш. RouteServiceProvider тоже не трогал.
upd. почистил - не помогло. хоть бери и делай заново проект(
Возможно проблема из-за неправильного навешивание RBAC (делал по примеру статьи)
Ради интереса - если ты меняешь action у роута, команда все равно php artisan route:list отобразит App\Http\Controllers\HomeController@index ?
Проверил, да, отобразит старый.
По поводу файла - @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');
});
});
Попробуй вручную удалить файл 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 | |
+--------+--------------------------------+----------------------------------------------+-------------------------------+---------------------------------------------------------------------------+-
-------------------------------------------------------------------------------------------------------------------------+
Проблема в том, что при вызове php artisan route:list видишь home вместо admin? Если так, что почисти кэш php artisan route:clear и убедись, что команда не вернула ошибку.
В том то и дело, что ошибки нету
Проблема следующая:
код 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, где, в теории, я еще не переназначил правильно?
п. с. куки путией тоже чистил
При открытии любого проекта получаю сообщение
Composer: Composer configuration file found. Initialize Composer settings? Do not ask again.
Каждый раз инициализирую вручную, при том, что в настройках выставлен дефолтный интерпритатор PHP и путь к .phar в папке с одноименной версие PHP.
Путь к .json указан в папке с текущим проектом.
Нет, не нужна дополнительная инициализация. phone тоже должно быть в кавычках:
{!! Form::number('phone', null, array('class' => 'form-control', 'id'=>'phone')) !!}
Спасибо, буду пробовать!
Есть поле:
{!! 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 допольнительно?
Попробуй так:
Html::image('image.jpg', null, ['style' => 'height: 50%'])
Лучше, конечно же, это в стили вывести и сделать:
['class' => 'some-image-class']
Спасибо!
Можно ли в хелпер просто дописать 'style'=>'height:50%'?
upd так и сделал, тему можно удалить
Если изображение сохраняется на сервер в разрешении 500х500, а для некоторой view нужно вывести его же 50х50, как это лучше сделать?
Думаю ресайзить два раза и сохранять в двух папках не лучший вариант?
Или лучше средствами css выводить уменшенное?
Сейчас для вывода использую хелпер:
{{ Html::image() }}
Тут одной ссылкой не отделаешься, нужно прочитать всю документацию. Договоренности есть везде - в моделях, маршрутах, контроллерах и пр. Начни с чтения доков об Eloquent и отношениях:
https://laravel.ru/docs/v5/eloquent
https://laravel.ru/docs/v5/eloquent-relationships
Еще вопрос вдогонку: вышеприведенным способом можно (и нужно?) выводить, к примеру, авторов статьи (на такой же странице, где статей много, и возле каждой нужно указать автора) и т. д.?
Но вообще, намного лучше следовать договоренностям, в таком случае кода будет в разы меньше. В этом вся прелесть Laravel.
Не нашел в документации.. Можно ссылку?
А, у тебя ключ не соответствует отношению, поэтому нужно его вручную добавить:
public function file() { return $this->belongsTo(File::class, 'image_id'); }
Спасибо! Работает! Сейчас выводит просто название файла.
Сделал вот так:
<td>{{ Html::image('images/' . $user->file->link) }}</td>
Если не у всех пользователей есть изображение, то добавь проверку:
<td>{{ is_null($user->file) ? 'no image' : $user->file->link }}</td>
Или то же самое, но с помощью @if
Ну у меня чистая БД, я создал 2 пользователя, судя по БД, изображение у них есть, оно есть так же в файлах проекта. Возможно, проблема в контроллере. Название изображения, идентичное файлу на сервере хранится в поле "link" в таблице "file"
Интересно посмотреть как раз relations, там должен быть объект file
"file" => null
Ага..
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
Покажи что выдает 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
}