Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Storage работает не от корня файловой системы, все пути для него являются относительными от родительской папки, которая задаётся в настройках конкретного сториджа в config/filesystems.php
а чем отличается удаление по полному пути и не по полному. Вы мне уже 4 человек об этом говорите... и я вчера благополучно перписал все на локальное хранилище и доставание через симлинку, результат точно такой же: Storage не работает. Работает только File::
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;
use App\Good;
use App\Image;
class testpost extends Controller
{
//
public function execute(Request $request){
$directory = "/Users/local/Desktop/111/2.png";
//unlink($directory);
dd(Storage::delete($directory));
//$status_delete_file=Storage::deleteDirectory($directory);
}
}
Пытаюсь просто удалить вот файл "/Users/local/Desktop/111/2.png"
в итоге Storage ни сам файлик ни папку 111 целиком не удаляет, всегда возвращает false. А вот если использовать родной метод php unlink то без проблем сносит.
Те с правами точно нет заморочек, все делаю на локале да и unlink бы не работал. Что может быть?
Пробовал и в локальное хранилище складывать ну по пути storage/app/public тоже самое. Не могу понять.
-----------------
версия 5.4
PHP 7.1.1
filesystems.php
https://paste.laravel.io/f6ed6219-6200- … cd401387f5
роуты
Route::group(['prefix' => 'admin'], function(){
//главная страница админки
Route::get('/',function(){
if (view()->exists('admin.index')){
$admin_data = [
'title' => 'товары'
];
return view('admin.layouts.app',$admin_data);
}
});
//листинг товаров из базы
Route::get('goods',['uses'=>'AdminGoodControllerList@execute','as'=>'goodslist']);
//показываем форму для добавления
//Route::get('/addgood',['uses'=>'AdminGoodControllerAddGood@execute','as'=>'addgood']);
Route::match(['get','post'],'/addgood',['uses'=>'AdminGoodControllerAddGood@execute','as'=>'addgood']);
//листинг товаров из базы
Route::match(['get','post','delete'],'/editgood/{good?}',['uses'=>'AdminGoodControllerEditGood@execute','as'=>'editgood']);
});
контролер AdminGoodControllerEditGood
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;
use Validator;
use App\Good;
use App\Image;
class AdminGoodControllerEditGood extends Controller
{
//показываем форму добавления в базу продукта
public function execute(Good $good, Request $request){
if ($request->isMethod('post')){
$input = $request->except('_token');
$massages = [
'required'=>'Ты обязан заполнить это :attribute',
'unique'=>'Эта хрень :attribute должна быть уникальной',
'numeric'=>'Вэтом поле :attribute только цифры можно юзать'
];
$rullers = [
'title' => 'required|max:255',
'description' => 'required',
'courier'=> 'required|unique:goods,courier,'.$input['id'],
'sku'=> 'required|unique:goods,sku,'.$input['id'],
'price'=> 'required|numeric',
'quantity'=> 'required|numeric'
];
$validator = Validator::make($input,$rullers,$massages);
if($validator->fails()) {
return redirect()
->route('editgood',['good'=>$input['id']])
->withErrors($validator);
}
$arr = [
'title' => 'Редактор',
'data' => $good
];
}
$arr = [
'title' => 'Редактор',
'data' => $good
];
return view('admin.formEdit',$arr);
}
}
/editgood/{good?} - если так то по запросу:
/admin/editgood/9 - будет идти все ок
но если я в роутах напишу:
/editgood/{good} - те good как обязательная переменная, делаем такой же запрос
/admin/editgood/9 - пишет обязательная переменная good пропущена
Так же не должно быть. Что делать?
Привет всем!
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;
use Validator;
use App\Good;
use App\Image;
class AdminGoodControllerEditGood extends Controller
{
//показываем форму добавления в базу продукта
public function execute(Good $good, Request $request){
if ($request->isMethod('post')){
$input = $request->except('_token');
$massages = [
'required'=>'Ты обязан заполнить это :attribute',
'unique'=>'Эта хрень :attribute должна быть уникальной',
'numeric'=>'Вэтом поле :attribute только цифры можно юзать'
];
$rullers = [
'title' => 'required|max:255',
'description' => 'required',
'courier'=> 'required|unique:goods,courier,'.$input['id'],
'sku'=> 'required|unique:goods,sku,'.$input['id'],
'price'=> 'required|numeric',
'quantity'=> 'required|numeric'
];
$validator = Validator::make($input,$rullers,$massages);
if($validator->fails()) {
return redirect()
->route('editgood',['good'=>$input['id']])
->withErrors($validator);
}
$arr = [
'title' => 'Редактор',
'data' => $good
];
}
$arr = [
'title' => 'Редактор',
'data' => $good
];
return view('admin.formEdit',$arr);
}
}
структура таблицы
'courier'=> 'required|unique:goods,courier,'.$input['id'],
'sku'=> 'required|unique:goods,sku,'.$input['id'],
данные правила не проходят проверку, когда я пытаюсь отправить форму валидатор говорит что поля должны быть уникальным, ок ... но я же добавил исключение!
courier,'.$input['id']
подскажите в чем может быть проблема?
Также пробывал правила задавать так
'courier' => ['required',Rule::unique('goods')->ignore($input['id'])],
один фиг тоже самое.
вывод DD если отправляем пост, то видим что ID он ловит все ок.
array:8 [▼
"id" => "9"
"title" => "Товар номер 3"
"description" => "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut finibus enim, in fermentum orci. Phasellus lacinia enim sed lacus vulputate, eu males ▶"
"courier" => "55842333"
"sku" => null
"price" => "50"
"quantity" => "698"
"active" => "on"
]
PS
php artisan --version
Laravel Framework 5.4.32
Да все верно, даже мыслей не было бинарки пихать в базу, онли файлы. Спасибо большое за предупреждение.
ну я пошел по пути "полиморфической связи". Вроде то что нужно.
Подскажите как правильно сделать структуру базы под изображения в магазине. Есть три вида изображений: это главныЕ изображения, те они могут выводиться под каждым товаром, также есть изображения дополнительные которые используются в описании, и их тоже может быть несколько, также есть изображения для комментариев, где каждый комментарий может содержать несколько изображений. Вобщем я думаю создать просто три таблицы с внешними ключами, и разложить изображения соотвествии с вышеперечисленными принципами. Есть мож другой подход?
composer require "laravelcollective/html":"^5.4.0"
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing laravelcollective/html (v5.4.9): Loading from cache
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postUpdate
> php artisan optimize
Generating optimized class loader
The compiled services file has been removed.
Skipped installation of bin bin/psysh for package psy/psysh: file not found in package
Skipped installation of bin phpunit for package phpunit/phpunit: file not found in package
Не могу понять что этому надо вообще, вроде версия в порядке
php artisan --version
Laravel Framework 5.4.32
Чистил кешь композера, что тока не делал. Помогите!
Если гуглить выводит китайскую ересь https://goo.gl/JvBLCV
всем спасибо! видимо надо работать с утра, а не по ночам
https://laravel.ru/forum/viewtopic.php?id=2829 тут я вывел вобщем под каждый товар своИ картинки. Вот что получилось:
DD
Скажите пожалуйста как обратиться теперь мне к имени файла картинки наденной.
ну логично было бы сделать так:
$goodlist = Good::with(['images' => function($query){
$query->where('general', '=', 1);
}])->paginate(5);
foreach ($goodlist as $key => $value) {
$value->images->name;
}
Но пишет что такого $value->images->name не найдено
Property [name] does not exist on this collection instance.
Если вывести
dd($value->images);
вот же он: name, от чего не выводит?
решил проблему, если кому интересно
$goodlist = Good::with('images')->paginate(5);
Есть таблица images в ней есть внешний ключ на таблицу goods
собственно сама таблица goods
В контролере у меня есть такой запрос:
$goodlist = DB::table('goods')->paginate(5);
$pages = $goodlist->render();
В модели Good есть
public function images(){
return $this->hasMany('App\Image');
}
Но мне надо каждый товар чтоб дополнился еще и картинкой из images в $goodlist.
Как это лучше сделать подскажите пожалуйста.
Если скажем выводим 100 записей на страницу, то надо делать получается 100 запросов только для одной страницы в базу данных?
С другой стороны если выгрести все картинки вообще, то это тоже не верно их может быть очень много же. Получается надо состряпать какой то один запрос большой где перечислить все ID первой страницы или как? Помогите пожалуйста. Тут еще и paginate...
кодировку сменил помогло спасибо!
Сама ошибка возникает при миграции на дефолтных миграционных конструкциях.
php artisan migrate
Migration table created successfully.
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
есть лечение
https://laravel-news.com/laravel-5-4-key-too-long-error
содержание моего файла данного
http://www.heypasteit.com/clip/0IIQIO
все равно пишет тоже самое!
нашел в документации, кому интересно:
>composer create-project --prefer-dist laravel/laravel blog "5.2.*"
Здравствуйте!
Подскажите пожалуйста, как именно мне поставить более старую версию laravel 5,2, при помощи композера?
Причина, видео обучающее нацеленно именно на эту версию.
Спасибо!