Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Должен ли как-то отличаться механизм регистрации пользователей по-умолчанию от регистрации через паспорт?
Приложение работает через API и требуется проверять авторизацию пользователей, но через middleware api сессия, которая стартанула через обычную авторизацию пользователя, не проверяется. Вопрос- что нужно сделать при регистрации и авторизации пользователя, что бы видеть видеть сессию пользователя ?
Есть необходимость в админку (sleepingowl) добавить свой Vue-компонент.
До этого все компоненты располагались /resources/assets/js/components.
Подключаю в админке свой блейд, который находится в папке resources/views/admin/
<div id="appCropper">
<cropper-admin></cropper-admin>
</div>
Дальше, уже в папке public делаю
let Child = {
template: '<div>test</div>'
};
new Vue({
el: '#appCropper',
components: {
'cropper-admin' : Child
}
});
Но проблема в том, что, когда я делаю require('путь_до_компонента_в_папке_resouces') у меня консоль выдает ошибки. Тоже самое, когда пытаюсь сделать
import VueSweetalert2 from 'vue-sweetalert2';
Vue.use(VueSweetalert2);
Приложение начало очень странно работать. Если я удаляю эту таблицу, то все приложение перестает работать. Не открывается ни одна страница, падает даже композер. Если создаю вручную эту таблицу, то не могу применить миграцию, т.к. таблица уже создана. Если откатываю миграции и эта таблица удаляется, приложение опять падает. Какая-то тупиковая ситуация получается. Не понимаю, почему именно ЭТА таблица, почему не любая другая.
На стэковерфлоу тема - https://stackoverflow.com/questions/477 … 5_47795606
Все, что подсказали, не работает.
дело в том, что не работает теперь ни одна команда вообще. Я даже миграцию не могу запустить заного
Запустил миграции и после этого приложение перестало работать.
Сначала, я подумал, что дело в ошибке в миграции, но не мог запустить вообще ни одну команду. даже php artisan или composer-dump autoload отказывались работать. Ошибка следующая
Base table or view not found: 1146 Table 'delivery_update.services' doesn't exist in /home/delivery/dev2/vendor/laravel/framework/src/Illuminate/Database/Connection.php
Затем я попробовал просто открыть сайт, но вылетела ошибка 500.
Зашел в файл Connection.php и выключил вывод ошибок.
Fatal error: Uncaught PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'delivery_update.a_delivery_service' doesn't exist in /home/delivery/dev2/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 668...
полный скрин ошибки - http://joxi.ru/a2X45M1S1eW4E2
Так же я не могу запустить миграции по новой, поскольку ловлю данную ошибку.
Кто-нибудь сталкивался с подобным?
Перевожу проект с Laravel 5.0 на Laravel 5.5. Проект не мой. В нем есть сервис провайдер, который называется BusServiceProvider (точно с таким же названием, сервис провайдер, есть и в Illuminate\Bus\BusServiceProvider). В нём реализован только метод boot.Код в нем следующий
public function boot(Dispatcher $dispatcher)
{
$dispatcher->mapUsing(function($command)
{
return Dispatcher::simpleMapping(
$command, 'App\Jobs', 'App\Handlers\Commands'
);
});
}
Не могу понять, что делает этот сервис провайдер и при попытке просто задублировать код в новом проекте (где версия 5.5) методы mapUsing и simpleMapping не найдены.
текст задачи тут https://laravel.ru/forum/viewtopic.php?id=2826
плачу 1500р банковским переводом.
Сам текст задачи вот такой
Будем считать, что директория . корень проекта Laravel 5.4
Для Laravel 5.4 написать сервис, отдельным модулем,
который возможно проинсталлировать через composer из локальной директории в vendor из дериктории ../vendor/objects
При публикации сервиса через artisan vendor: publish в дериктории конфигураций laravel должен создаться конфиг objects.php
Сервис должен быть доступен через алиас "Objects" фасада сервиса
Сервис имеет метод make - возвращающий объекты типа класса из конфига objects.php
В конфиг objects.php будут вноситься различные значения '{Наименование}'' => [class => '{Класс}', age => {Возраст}], например 'Dog' => ['class' => \Examples\Dogs::class, 'age' => 7 ], 'Cat' => ['class' => \Examples\Cats::class, 'age' => 3 ],
где все классы обязаны иметь методы age() возвращающие соответствующее значение из age - конфига в соответствии с классом, и class() возвращающие строку с наименованием класса объекта в котором вызван
Сервис не может создать объект, у класса которого отсутствуют обязательные методы.
Если запросить не существующий в конфиге класс, должно быть брошено исключение класса \Examples\ObjectsMakeException::class
Тесты в php artisan tinker:
$dog = Objects::make('Dog'); \\$dog объект класса \Examples\Dogs
$dog->age(); \\Должен вернуть 7
Objects::make('Cat')->age(); \\Должен вернуть 3
Objects::make('Cat')->class(); \\Должен вернуть (String) '\Examples\Cats'
Objects::make('Human'); // ObjectsMakeException
Насколько я понимаю, нужно действовать вот так:
1. Создать в корне папку packages, в которой будет весь код пакета
2. Создать там сервис провайдер, который будет регистрировать весь пакет
3. Создать абстрактный класс Object, который будет содержать абстрактные методы age и class
4. Наследовать все классы, которые заданы в конфиге от этого Object...
...
Как то дальше не соображу
на самом деле помогло php artisan down, php artisan up
прописал в .env
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=sfc
DB_USERNAME=root
DB_PASSWORD=123456
DB_VITYA_DATABASE=sfc_vitya
DB_VITYA_USERNAME=root
DB_VITYA_PASSWORD=123456
и в config/database.php
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'sfc'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', '123456'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'sfc_',
'strict' => true,
'engine' => null,
],
'mysql_vitya' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_VITYA_DATABASE', 'sfc_vitya'),
'username' => env('DB_VITYA_USERNAME', 'root'),
'password' => env('DB_VITYA_PASSWORD', '123456'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'sfc_',
'strict' => true,
'engine' => null,
],
ставлю в default
'default' => env('DB_CONNECTION', 'mysql_vitya')
в итоге используется соединение с БД старое
так вроде тесты должны после выполнения теста откатывать базу к изначальному состоянию. изменённое значение можно увидеть только внутри конкретного теста
как ни странно все заработало. само.
Есть метод, который делает апдейт записи в бд. Если запрос посылается через юзер - интерфейс то все ок и апдейт срабатывает.
Вот код апдейта
$game_periods_table = DB::table('game_periods')->where('id', $id);
$current_update_array = [];
if(array_key_exists('A', $count_throws)){
$current_update_array['count_throws_a'] = $count_throws['A'];
}
if(array_key_exists('B', $count_throws)){
$current_update_array['count_throws_b'] = $count_throws['B'];
}
$current_update_array['updated_at'] = date('Y-m-d H:i:s');
$game_periods_table->update($current_update_array);
А вот так выглядит юнит тест этого метода
protected $bgame;
protected $game_id = 95;
public function setUp(){
parent::setUp();
$game = new Game();
$game = $game::find($this->game_id);
if(is_null($game)){
$this->fail('Game is not found!');
}
$this->bgame = new BGame($game);
}
public function testUpdateThrows(){
$test_array = [
'first_period_throws' => ['A' => 1, 'B' => 2],
'second_period_throws' => ['A' => 3, 'B' => 4],
'third_period_throws' => ['A' => 5, 'B' => 6],
'ot_period_throws' => ['A' => 7, 'B' => 8],
];
$this->assertTrue($this->bgame->updateThrows($test_array));
}
Тест успешно проходится, однако запись в БД не обновляется. Если делаю дамп апдейта
dd($game_periods_table->update($current_update_array));
то возвращается "1", т.е. одна строка была зтронута.
Для юнит тестов использую тестовую базу, которая идентична основной.
версия 5.4
есть такой sql - запрос
SELECT pm.Id, p.first_name, p.second_name, p.last_name
FROM
sfc_bids_players_matches AS pm
JOIN sfc_bids_players_champs AS pc ON pm.bid_player_champ_id = pc.Id
JOIN sfc_players AS p ON p.Id = pc.player_id
WHERE
pm.bid_team_match_id IN (
SELECT team_a_btm_id FROM sfc_games WHERE id = 95
UNION
SELECT team_b_btm_id FROM sfc_games WHERE id = 95
)
как можно с помощью конструктора запросов составить это же выражение?
Laravel 5.4. Sleeping Owl 4
Не могу понять, как сделать вложенное меню. У меня есть секции в которых
public function initialize()
{
$this->addToNavigation($priority = 600, function() {
});
}
а как вложить в общий список два пункта секции?
есть две модели (победители и команды), связь один к одному.
Победители
public function team(){
return $this->hasOne('App\Models\Team', 'id');
}
Команды
public function winner(){
return $this->belongsTo('App\Models\Winner', 'team_id');
}
делаю запрос
$winners = Winner::where('championship_id', 2)->get();
получаю коллекцию из двух нужных мне элементов.
Затем идут циклом по коллекции
foreach($winners as $winner){
dump($winner->team);
}
и для первой коллекции возвращается null, для второй все нормально
но если делаю
foreach($winners as $winner){
dump($winner);
}
то нужный элемент выводится и не пустой
SO последняя версия, ларавел тоже
Создаю модель, делаю ей
AdminColumn::lists('type.name', 'Тип чемпионата')
В моделях стоят отношения
class Championship extends Model
{
public function type(){
return $this->belongsTo('App\Models\Enum\EnumChampionshipType', 'id');
}
class EnumChampionshipType extends Model
{
public function championship(){
return $this->hasMany('App\Models\Championship', 'type_enum_id');
}
}
при загрузке страницы ловлю ошибку
FatalErrorException in 74d7252e8b7d20fd1a1f60d84c0c0621d05358d4.php line 0:
Method Illuminate\View\View::__toString() must not throw an exception
С чем может быть связано это?
нагуглил, помогло решение composer require doctrine/dbal
хмммм, тут только руками щупать, сказать не могу.
Так запрос по типуSELECT championship_name FROM `championships` WHERE 1
не прошёл?
странно, закомментировал строчку
//$table->string('championship_name',255);
и все выполнилось.
Теперь новая проблема, создал новую миграцию, делаю php artisan migrate, Ловлю ошибку
Class 'Doctrine\DBAL\Driver\PDOMysql\Driver' not found
А где вы его указывали?
config/database.php
'prefix' => 'sfc_'
сейчас создал миграцию
public function up()
{
Schema::table('sfc_championships', function (Blueprint $table) {
$table->string('championship_name',255);
$table->string('championship_url_code',255);
$table->integer('championship_type_id');
$table->integer('championship_season_id');
$table->integer('championship_start_playoff_id');
$table->integer('championship_3place');
$table->integer('championship_current_id');
$table->integer('championship_stat_id');
$table->integer('championship_mingk');
$table->integer('championship_maxplayers');
});
}
вызываю migrate, получаю ошибку Table sfc_sfc_championships doesn`t exist
Так у вас имя таблицы --table=championships
то есть championships а не sfc_championships
а то, что я указал префикс в конфигурации бд не имеет значения?
в таблице запись есть.
после sql запроса
Error
SQL query: Documentation
SELECT championship_name FROM `sfc_championships` WHERE 1
LIMIT 0, 25
MySQL said: Documentation
#1054 - Unknown column 'championship_name' in 'field list'
у вас случаем не OpenServer и phpMyAdmin стоит?
если так то в некоторых версиях есть косячок в phpMyAdmin, там в левом фрейме новые таблицы не появляются, нажмите на саму базу и посмотрите в основном окне
нет, CentOS и phpmyadmin.
Причем нормально срабатывает миграция на создание таблицы
сначала прописал в консоли
php artisan make:migration new_tables_championships --table=championships
создалась миграция, туда добавил
public function up()
{
Schema::table('championships', function (Blueprint $table) {
$table->string('championship_name',255);
$table->string('championship_url_code',255);
$table->integer('championship_type_id');
$table->integer('championship_season_id');
$table->integer('championship_start_playoff_id');
$table->integer('championship_3place');
$table->integer('championship_current_id');
$table->integer('championship_stat_id');
$table->integer('championship_mingk');
$table->integer('championship_maxplayers');
});
}
затем прописал в консоли
php artisan migrate
Migrating: 2017_03_22_133851_new_tables_championships
Migrated: 2017_03_22_133851_new_tables_championships
но в бд ничего не поменялось