Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Почему? Если переделать, чтобы они читались из базы в момент, когда я пытаюсь прочитать репозиторий, то, наверное, все будет нормально.
Да, модель Eloquent. Репозиторий нужен потому что категории выводятся в нескольких местах и каждый раз их получать, наверное, не очень хорошо.
А в какой момент данные ложить в репозиторий? При попытке получить их первый раз или в middleware?
Категории нужны на всех страницах сайта?
Можешь кэшировать их и грузить всегда.
На всех.
Кэшировать вместо использования репозитория? А простые данные можно ложить в кэш?
Здравствуйте. Я сделал репозиторий и фасад для него. В репозитории храниться список категорий магазина. Каким образом лучше получать из него данные: в контроллере и передавать в вид или сразу в виде? На данный момент данные в него записываются из middleware. Каким образом лучше сделать: оставить как есть или при попытке чтения, если данных нет, то получить и записать?
Спасибо большое. Прописал в самой модели отношения. Все работает. Спасибо большое. Вы меня часто выручаете.
Здравствуйте. Предположим есть таблица категорий в которой записаны категории и подкатегории. Структура таблицы примерно такая:
id | slug | name | parent
id - идетификатор
slug - ссылка из адресной строки, по которой происходит получение категории
name - имя категории
parent - идентификатор категории к которой принадлежит подкатегория.
Предположи что мне нужно получить категорию и ее подкатегории по ссылке. Можно ли получить категорию, узнать ее id и по нему получить подкатегории за один запрос?
Или лучше сделать две таблицы и связать их через один ко многим?
Спасибо за помощь всем.
hzone, да, я с вами конечно согласен. Но этот VDS чисто для моего личного использования. На основной работе , к сожалению, компьютер не тянет винду 7, для установки пхп7. А он нужен для моих некоторых проектов.
Nogard7491, я смотрел там. Но проблема в том что для этого нужен домен, а мне не очень хотелось регистрировать его.
Проблема оказалась в том что права на папку storage были 755. Немного не понимаю. Почему в ларе по умолчанию не стоят данные права? И еще есть небольшой вопрос. Почему при установке через терминал в composer.json прописалась версия php 5.6, хотя ее я даже не ставил, а установил только php 7.0?
А как их настроить правильно? А то я пытался, но ничего не получилось.
Я так понимаю что проблема в путях. Но где их менять?
Здравствуйте. Возникла проблема следующего характера. Есть VDS с Apach и PHP7. Если я устанавливаю фреймворк в корневую папку /var/www/ то все работает отлично. Но как только я переношу сайт в папку /var/www/laravel сразу появляется NotFoundHttpException. Если ввожу domain.ru/laravel/public - получаю пустую страницу.
.htacces
AddDefaultCharset utf-8
AddType 'text/html; charset=utf-8' .html .htm .shtml
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
В чем может быть проблема?
Понятно, хорошо, спасибо большое за помощь.
Идентификатор сессии там уже больше для «перебдеть» - Да, чтобы 200% уникальный результат получить)
Понял, спс за ответы.
А можно еще пару вопросов не по теме, как к знающему разработчику?
1. Будет ли данная функция генерировать действительно уникальный идентификатор?
protected function _generateUid(Request $request)
{
return uniqid($request->session()->getId(), true);
}
Ведь в данный момент времени не может быть двух пользователей с одинаковым идентификатором сессии.
2. Правильно ли выносить запросы в модель? Например так:
class Price extends Model
public function getBySid(string $sid)
{
try{
return $this->whereSid($sid)->first();
} catch (\Exception $e){
return false;
}
}
}
По факту он никуда не привязан. Эти значения будут находиться в куке в виде сериализованного массива. Когда пользователь заходит на сайт. Данный массив считывается и записывается в конфиг для более удобного обращения. А далее инжектить, как я писал во втором посте. Либо пользовательские объекты так инжектить не получится?
Да, текущего. А в чем преимущество ленивой инициализации перед инъекцией? Просто мне может потребоваться использовать данный конфиг в middleware, моделях. А где будет находиться это юзер проперти?
Предполагается только конфиг одного юзера. В нем будет содержаться уникальный идентификатор, для получения записей из бд. Например переменная указывающая на то в каком виде предоставлять информацию(список, мозаика) и т.д.
Например примерно такой:
class IndexController extends Contoller{
public function index(Config $config){
$items = ItemsModel::whereUid($config->getUid())->get();
}
}
Какое-нибудь подобное использование может потребоваться например в middleware.
Здравствуйте. У меня такой вопрос. Предположим что мне нужна какая-то конфигурация, доступная в любой точке проекта. В ней есть какой-нибудь идентификатор пользователя по которому в базе буду храниться различные данные, а также другие данные. Например так:
class Config{
private $_uid;
public function getUid(){
if(empty($this->_uid)){
/* Генерируем uid и сохраняем в переменную */
}
return $this->_uid;
}
}
И далее с помощью инъекций добавляем его куда нужно.
Правильно ли так делать?
Я думал о таком решении. В моем случае я могу сделать как-то так:
$path = $this->_request->path();
$pathParts = explode('/', $path);
if($pathParts[0] == /* Тому чему нужно */){
/*Здесь все происходит*/
}
Но мне кажется это не сильно элегантно.
Здравствуйте. Использую View Composer для создания хлебных крошек. Но проблема в том, что для их формирования требуется Api, что не очень-то быстро. И отображать мне их нужно не на всех страницах. Как можно указать какой-нибудь фильтр, когда подключать данный сервис провайдер?
class ComposerServiceProvider extends ServiceProvider
{
public function boot()
{
View::composer('*', 'App\Http\Composers\BreadCrumbComposer');
}
}
class BreadCrumbComposer
{
public function compose(View $view)
{
/*Здесь все происходит*/
}
}
Да, в некоторых контроллерах идет много подобных проверок. С учетом вызовов всех методов контроллер получается все равно очень жирным. Валидацию я делаю с помощью Реквестов. Но ведь Реквест как-то может перенаправить обратно на представление с сохранением всех ошибок. Интересно как?
И тогда в контроллере получается много таких проверок. Что мне совсем не нравится.
Ну например как-то так:
class IndexController {
$array = [1, 2, 3];
$class = new ServiceLayer();
$newArray = $class->sortArray();
if($newArray === false){
return back()->withErrors(['Ошибка']);
}
return back()->with(compact('newArray'));
}
class ServiceLayer {
public function sortArray($array){
if(gettype($array) != 'array' || count($array) <= 0){
return false;
}
foreach($array as $item){
/*Производим действия над элементом массива*/
}
return $array;
}
}
Просто некоторые контроллеры получаются излишне жирными. Я так понимаю что часть кода правильно выносить именно в Service Layer. Но там может генерироваться много ошибок, например массив нулевой длины или пустая строка. И тогда приходится все эти ошибки возвращать в контроллер и он будет состоять из кучи проверок, что тоже, наверное, неправильно.
Например Service Layer.