Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Копаю дальше.
Мне нужно в методе
public function filter(Request $request)
Фильтровать результат из метода
public function search()
Переменную с результатами я могу передать. Но проблемма в том что во время выполнения метода filter массив из продуктами очищается так как никто не обращается к методу
public function search()
Подскажите как быть?
Решил вопрос так
public function search(){
$products = 'The list of users';
return $products
}
public function filter(){
$products = $this->search()->products;
}
Если в контроллере есть две функции
public function search(){
$products = 'The list of users';
}
public function filter(){
$products
}
Можно ли получить переменную в другой функции?
Есть некая форма для поиска
<form action="/search" method="GET">
<input value="{{request()->query('search')}}" type="text" name="search" placeholder="Search...">
<button type="submit"><i class="searchicon"></i></button>
</form>
В web.php такой роут
Route::get('/search', 'ShowCustomerController@search');
В ShowCustomerController такая функция
public function search(){
$search = request()->query('search');
$products = Products::where('title', 'LIKE', "%{$search}%")->get();
return view('searchresults')->with('products', $products);
После поиска слова "product1" у меня в URL отображается /search?search=product1
Сталкиваюсь с проблеммой когда потом хочу отфильтровать этот поиск.
На той же странице есть другая форма
<form action="/filter">
<input value="0" min="0" name="minprice" type="number">
<input min="0" name="maxprice" type="number">
</form>
в web.php такой роут
Route::get('/filter', 'ShowCustomerController@filter');
Дальше в контроллере
public function filter(Request $request)
{
$url = url()->previous().'/'.'filter?minprice=0&maxprice=2323'; ///такая строка мне нужна потом в URL
$product = Product::with(***тут нужно принимать только те продукты которые уже выбраны по поиску search->query) ***)
if ($request->has('minprice')) {
$users->where('price', '<', "%$request->minprice%");
}
}
Вот я запутался и не знаю что делать дальше.
Так как на выходе после фильтрации в URL мне нужна строка.
/search?search=product1/filter?minprice=0&maxprice=2323
Я не понимаю что такое request()->query(); и не понимаю как сделать URL тот который мне нужен.
Помогите пожалуйста, тот кто разбирается.
Спасибо большое за совет.
Изминение версии БД меня немножко озадачили.
Вот в чем суть.
На хостинге имею сайты на Wordpress и Laravel. Там стоит версия MySQL
Версия сервера: 5.7.16-10-log - Percona Server (GPL), Release 10, Revision a0c7d0d
На локальном Open Server же стоит версия MySQL 5.6 x64.
Есть еще опции MySQL 5.7, MySQL 8.0.
Проблемма в том что когда я обновляю версию БД на локалке то проэкты у меня ломаются. Wordpress пишет Ошибка установки соединения с базой данных
Laravel пишет SQLSTATE[HY000] [1049] Unknown database
Как теперь решить такую проблемму?:)
Собственно первый вопрос:
При создании товара на маркетплейсе у него будет очень много разных характеристик ( цена, цвета, цена доставки, страна производства и так далее)
Все это предугадать невозможно ведь разные люди будут писать разное.
Все продукты которые будут добавляться пользователями я думаю помещать в одну таблицу в БД ( MYSQL)
Поскольку, как я уже написал, предугадать характеристики нереально, то создавать отдельный столбец для каждой характеристики нету смысла, а хорошо бы было записать все характеристики в ассоциативный массив в json и поместить в одну ячейку да и все.
Вопрос: какого формата столбец в таблице создать?
Schema::create('products', function (Blueprint $table) {
$table->bigIncrements('id');
$table->text('title');
$table->increments('cat_id');
$table->json('options'); // как создать эту ячейку? можетпросто $table->text('options');
$table->timestamps();
});
Когда пытаюсь создать такую таблицу то Laravel ругается вот так
Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'json not null, `created_at` timestamp null, `updated_at` timestamp null) default' at line 1 (SQL: create table `products` (`id` bigint unsigned not null auto_increment primary key, `title` text not null, `cat_id` int unsigned not null auto_increment primary key, `options` json not null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci')
И подскажите как туда загнать данные из input'ов? Именно в ассоциативный массив.
Появиалсь идея создать маркетплейс на Laravel.
Пока что только прописал себе в exel функционал, сейчас распределяю какие мне нужны будут Modules, Controllers таблицы в БД.
Вопрос к сообществу такой: может кто делал что-то подобное? Интересно бы было почитать любой опыт.
А пока что у меня просьба у модераторов не удалять тему. Я думаю у меня будет появляться много вопросов по разным ньюансам и я их буду тут задавать, прямо в теме. Может людям потом пригодится.
Еще не дошел до этого. Сейчас решаю проблемму просто обновляя название файла стилей...
Хотя повторюсь, на локалке все работает как часы...
Напишу как я добавляю еще один элемент .vue
Захожу в папку /resources/js/components/ и создаю файл myNewComponent.vue с содержанием
<template>
I'm second Vue component
</div>
</template>
<script>
export default {
mounted() {
console.log('My new component mounted')
}
}
</script>
Дальше иду в файл /resources/js/app.js
И там дописываю
require('./bootstrap');
window.Vue = require('vue');
Vue.component('example-component', require('./components/ExampleComponent.vue').default);
Vue.component('myNewComponent', require('./components/myNewComponent.vue').default); ///Тут обьявляю новый компонент
const app = new Vue({
el: '#app'
});
Дальше в каком то view пишу
<div id="app">
<myNewComponent></myNewComponent>
</div>
<script src="js/app.js"></script>
И компонент не выводится...
Что я делаю не так?
Привет всем.
Как все знают Vue.Js установлен по дефолту в Laravel.
Я захожу в папку /resources/js/app.js и вижу там
require('./bootstrap');
window.Vue = require('vue');
Vue.component('example-component', require('./components/ExampleComponent.vue').default);
const app = new Vue({
el: '#app'
});
Дальше в welcome.blade вставляю этот компонент
<example-component></example-component>
<!-- need to put it before JQuery to let vuejs works -->
<script src="js/app.js"></script>
Содержание этого examplecomponent.vue который находится по адресу прикрепляю
<template>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Example Component</div>
<div class="card-body">
I'm an example component.
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
mounted() {
console.log('Example Component mounted.') // эту строку я изменил
}
}
</script>
На первый взгляд все работает, так как через браузер выводится "I'm an example component."
Но в консоли выводится "Component mounted" вместо "Example Component mounted."
Кроме того я изменил название "examplecomponent.vue" на "example2222component.vue"
а все и дальше работает....
Впечатление что где то кешируется компонент и без толку что я что-то меняю.
Если я пытаюсь добавить еще один элемент .vue то ничего не работает.
Запускаю я свой проэкт не через
php artisan serve
А просто через OpenServer.
Кто с таким сталкивался, обьясните пожалуйста как правильно работать с теми элементами в Laravel....:|
Привет всем. Скорее всего это уже заезженная тема но тем не менее, я не мог найти решения своей проблеммы в интернете.
Нужно почистить кеш на проэкте Laravel 5.8.
Проблемма появилась после переноса проэкта на хостинг. На локальном сервере все работает хорошо.
Пробовал уже писать команды
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
Эти команды мне не помогают, потому что файлы css и js остаются старые даже после очистки кеша браузера ctrl+f5.
Кроме того фотографии после замены в папке storage остаются старые.
А если у Вас в базе данных 4 цвета и 4 размера.
При этом получается 16 вариантов.
Вы по одному каждый вариант в БД пишете?
Можно ли сделать так чтобы в БД сразу создались вме комбинации, тоесть на основании 2ух столбцов создался третий стобец в котором будут все комбинации вариантов из первых двух?
У кого есть опыт, подскажите как лучше реализовать продукты из вариантами.
Хотелось бы чтобы в админке было похожее на WooCommerce из Wordpress но чтобы удобно было добавлять много варантов через Excel. Чтобы таблица была не сильно замудренная. Пока что дошел до такого.
В админке меню, похоже на Woocommerce
У Woocommerce есть такая штука где можно например из 4 вариантов цвета и 4 вариантов размера создать сраза 16 вариантов товара. Не понимаю как это реализовать на PHP.
Вот скрин что у меня в БД.
Я сразу создавал столбцы в таблице так как знал какие атрибуты у меня будут. Но если я захочу дописать еще один атрибут то не хотелось бы переделывать целую таблицу в бд. Поделитесь пожалуйста опытом кто знает как это делаеют? Были мысли сделать еще одну таблицу (промежуточную) где будут создаватся варианты, а их уже привязывать к таблице со значениями.
p.s. нашел что-то похожее на решение этой проблеммы в интернете, но пока не тестил.
Вставлю тут код, может кому пригодится.
Файл из view:
@section('content')
{{Form::open('PostController@edit')}}
<input type="hidden" name="post_id" value="1">
<legend>Message</legend>
<textarea id="editor" name="message"></textarea>
<button type="submit">Save</button>
{{Form::close()}}
@stop
@section('scripts')
$('#editor').summernote();
@stop
Файл контроллера
<?php
/**
* This exemple shows how to parse base64 encoded images (submitted using Summernote), save them locally
* and replace the 'src' attribute in the submited HTML content
*
**/
use Intervention\Image\ImageManagerStatic as Image;
class PostController {
public function edit(){
$post = Post::findOrFail(Input::get('post_id')); // Post object exemple
$message = Input::get('message'); // Summernote input field
$dom = new DomDocument();
$dom->loadHtml($message, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$images = $dom->getElementsByTagName('img');
// foreach <img> in the submited message
foreach($images as $img){
$src = $img->getAttribute('src');
// if the img source is 'data-url'
if(preg_match('/data:image/', $src)){
// get the mimetype
preg_match('/data:image\/(?<mime>.*?)\;/', $src, $groups);
$mimetype = $groups['mime'];
// Generating a random filename
$filename = uniqid();
$filepath = "/images/$filename.$mimetype";
// @see [url]http://image.intervention.io/api/[/url]
$image = Image::make($src)
// resize if required
/* ->resize(300, 200) */
->encode($mimetype, 100) // encode file to the specified mimetype
->save(public_path($filepath));
$new_src = asset($filepath);
$img->removeAttribute('src');
$img->setAttribute('src', $new_src);
} // <!--endif
} // <!--endforeach
$post->message = $dom->saveHTML();
$post->save();
Session::flash('message','Post updated!');
return Redirect::back();
}
}
Вот копирую из миграций
$table->text('content')->nullable();
Мне кажется длинна столбца подходит.
Но там нету функционала, который бы сохранял фото в какую-то папку, а дальше генерировал
<img src="путь-к-сохраненному-изображению">
А как вы считаете?
Когда поставил в проэкте laravel редактор Summernote то там при сохранеии возникает ошибка.
SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'content' at row 1 (SQL: update `posts` set `content` = <h3>DIGITAL IPSUM<img
Может кто подскажет что делать?
Вообще у таких редакторов есть функционал чтобы сохранять фото?
Привет.
Создаешь форму.
<form action="/user-update/{{ $user->id }}"
method="POST">
@csrf (не забываем токен)
<input name="name">
<input age="age">
<button type="submit"></button>
</form>
После этого создаешь роут
Route::post('/user-update/{userId}', 'usercontroller@updateUser');
Дальше в этом контроллере делаешь обновление значений в БД
public function updateUser(Request $request, User $User){
$User->title = $request->name; //пишем данные в таблицу
$User->description = $request->age;//пишем данные в таблицу
$User->save(); //сохраняем
request()->session()->flash('success', 'Обновлено!'); //выводим сообщение про обновление
return back();
}
{
Внимательно смотри чтобы в контроллере была подключена модель
use App\User; use Illuminate\Http\Request;
Я не знаю как у тебя называется модель и таблицы в базе данных.
Но принцип написал.
Сначала делаешь форму, потом из нее передаешь данные в контроллер. В контроллере обновляешь данные в базе.
Не могу подключить ни одного js из папки node_modules
Конкретно работал с CKEditor и увидел эту проблемму.
Поставил используя
npm install --save @ckeditor/ckeditor5-build-classic
После этого попытался подключить
<script src="{{asset('node_modules/@ckeditor/ckeditor5-build-classic/build/ckeditor.js')}}"></script>
Не работает. Просто в браузере захожу на адрес скрипта - отдает 404 ошибку.
При этом пакет установлен в папку vendor при помоши
composer require
Работает без проблем.
Сначала думал проблемма в файле
.gitignore
Удалял оттуда строку и назад подключал. Разинцы нет...
Помогите советом.
Как работать с теми модулями..
Разрабатываю на Laravel 5.8
На фронтенде вывожу целую категорию продуктов
@foreach($products as $product)
{{$product->name}}
<a href="/{{ $product->slug }}"></a>
@endforeach
{{$category->name}}
У меня в БД три таблицы с разными продуктами, тоесть в зависимости от категории продукты могут выводиться из разных таблиц.
Проблемма в том что мне нужно для вывода товара передать информацию про его категорию в Controller.
И нужно в идеале передать параметр {{$category->name}} в controller
Роут выглядит так
Route::get('{slug}', 'MyController@single');
Внутри MyController такое
public function single($slug)
{
как тут мне получить значение category->name ??
}
Помогите пожалуйста.
Страницы 1