Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Update и подготовленные запросы » 17.09.2016 22:30:33

т.е. делаем вывод гоняй через foreach и все норм?

#2 Re: Laravel 5.x » Как создать форму? » 17.09.2016 20:49:30

alex_whoami пишет:

Господа разрабы!

в пересечении темы.
не могу решить проблему  --"Class 'Form' not found" --
установкой  <laravelcollective/html> - не решилось дело.
в замешательстве =/

А фасады определил в app config?

#3 Laravel 5.x » Update и подготовленные запросы » 17.09.2016 19:31:21

Himu
Ответов: 9

приветствую! Объясните один момент
Я так понял что Eloquent изначально использует prepare statement, если скажем вставить данные в модель через insert (например:

Book::insert($booksArr));

Я вот только не могу понять как производить обновление, так же используя подготовленные запросы?
Т.е. получается есть модель Book и мне нужно у книги с id=1 установить поле author = Иванов, а у книги с id=2 author = Петров
Как то можно это сделать одни запросом, без использования цикла? Что-то вроде:

Book::whereIn('id', $idsArr)->update($authorsArr);

мне не симпатизирует писать так:

foreach($idsArr as $id){
Book::where('id','=', $id)->update(['author'=>$authorsArr[$id]]);
}

При таком написании парсер slq постоянно разбирает запрос и все с этим связанное. Подскажите как от этого уйти плиз

Спасибо!

#4 Re: Laravel 5.x » Планировщик задач под Винду. » 17.09.2016 19:13:19

Если еще актуально

Сам буквально на днях настраивал ради интереса шедулер под виндой. В общем создал батник с текстовочкой:

cd C:\path_to_root_folder //здесь указывает путь до папки, где лежит artisan
C:\your_path\php.exe C:\path_to_artisan\artisan schedule:run

И все. Ради теста в шедулере запускал метод call с частотой в одну минуту и писал в лог тупо текст "Running"

В Планировщике задач винды выбрал запускать задачу раз в минуту бесконечно, и выбрал созданный батник.

Еще меня донимало окно cmd когда батник запускался, я завернул вызов батника в vbs скрипт, которое скрыто запускало окно для выполнения

#5 Re: Laravel 5.x » Модель вызывается несколько раз » 09.06.2016 11:09:30

Вопрос решился достаточно просто: на firefox'е стояли плагины, которые выполняли свои собственные запросы к странице

#6 Re: Laravel 5.x » Модель вызывается несколько раз » 30.05.2016 21:05:30

hzone пишет:

1. что за тип поля в бд?

Тип varchar

hzone пишет:

2. стринг+стринг+стринг=стринг, не? если таки "не", то сделай dd(gettype($newSkipCode)) и убедись, что стринг.

Проверил, все стринг

hzone пишет:

3. ты серьёзно?!

Это невнимательность и это никак не влияет на повторную вставку данных и вызов модели несколько раз sad

Еще маленькая деталь. Когда просматриваешь вкладку Queries у дебагера отображается так же, что выполнялся только 2 запроса: 1. запрос на получение последнего Skipcode и 2. вставка нового Skipcode только с одной строкой

#7 Laravel 5.x » Модель вызывается несколько раз » 30.05.2016 16:16:32

Himu
Ответов: 3

Приветствую!
Ломаю голову над некоторой проблемой, помогите, если сможете smile

Мой роут:

Route::group(['middleware' => ['web']], function () {
    Route::get('/getEAN13', 'CoreController@getEan13Code');
});

Мой метод getEan13Code:

public function getEan13Code() {
        $lastSkipCode = Skipcode::orderBy('id', 'DESC')->first();
        $newSkipCode  = '';
        $newSkipCode = (count($lastSkipCode) == '')? $this->startSkipCode : $lastSkipCode['dec_number'] + 256;
        $currentDate    = date('Y-m-d H:i:s');
        $hexNumber      = $this->fromDecToHex($newSkipCode);
        $sc             = new Skipcode;
        $sc->dec_number = $newSkipCode;
        $sc->hix_number = $hexNumber;
        $sc->created_at = $currentDate;
        $sc->updated_at = $currentDate;
        $sc->save();
        $controlSum     = '|4';
        return view('pages.result')->with(['x' => $controlSum]);
    }

После обращения по адресу http://site.tu/getEan13Code в базу данных заносится почему-то 3 значения
Я голову сломал уже, не могу понять в чем дело. Если у модели Skipcode глянуть конструктор, он тоже вызывается три раза. В чем может быть причина??? Значения заносятся именно с разницей в 256 (это число я прибавляю)
Если сделать значение $newSkipCode статическим (т.е. не прибавлять к нему ничего, а просто назначить один раз значение) в таблицу заносится одно значение.
Спасите пожалуйста
Благодарю за ответы smile

#8 Re: Laravel 4 » Не работает Auth::login() » 03.12.2014 12:36:58

Менять не пробовал, но в сессию методом Session::put или Session::flash данные пишутся.
Я знаю например, что при подобном коде:

Session::put('info','put here');
exit();

В сессию данные не записывают, потому Laravel останавливается принудительно (ссылку дать на источник этой инфы не могу т.к. потерял)
Вот я и думаю, что методы Auth::login() и Redirect::to() как-то аналогично не могут ужиться

#9 Re: Laravel 4 » Не работает Auth::login() » 01.12.2014 17:53:07

в общем ошибка спряталась где-то тут

            Auth::login($user, true);
            Redirect::to("/kabinet")->with("user", $user);

Я так понима функция Auth::login записывает авторизированого пользователя в сессию и в БД в таблице пользователей заполняет поле remember_token. В саму таблицу token записывается, а вот в сессию ничего не пишется. Пришлось вручную заносить текущего пользователя заносить эту сессию и потом, в самом контроллере, который обрабатывает навигацию использовать функция Auth::login

            Session::flash("user", $user);
            Redirect::to("/kabinet")->with("user", $user);

Но все такие тему не закрываю, может кто-нибудь все такие предложит правильное решение проблемы, потому что свой костыль использовать глупо немного

#10 Re: Laravel 4 » Не работает Auth::login() » 29.11.2014 19:45:38

Может кто-нибудь скинуть пример файла .htaccess на боевом хостинге у себя? Меня интересует в первую очередь работа с mod_rewrite на apache. Структура файлов такая на хостинге:
www/mydomain.ru/laravel
В папке laravel, соответсвено, лежат все каталоги приложения (app, public и т.д.)
В корневой папке mydomain.ru лежит файл .htaccess:

RewriteEngine On
      RewriteCond %{HTTP_HOST} ^mydomain\.ru$ [OR]
      RewriteCond %{HTTP_HOST} ^www\.mydomain\.ru$
      RewriteCond %{REQUEST_URI} !^/laravel/public/
      RewriteRule ^(.*)   /laravel/public/$1 [L]

Данный код позволяет мне отображать страницы не по адресу mydomain.ru/laravel/public, а при заходе на страницу mydomain.ru
Вся навигация на сайте работает корректно, более того, на сайте имеется форма обратной связи, которая отправляет вопрос в БД и эта форма отрабатывается как надо. Проблема именно в авторизации.
провожу эксперимент:
Захожу по адресу mydomain.ru (это очень важно) и пытаюсь залогиниться. Ввожу данные, нажимаю вход. Все происходит через AJAX. Появляется сообщение, что авторизация успешна и происходит редирект на адрес "/kabinet". В роутах на этот маршрут стоит фильтр before auth. Он меня блокирует и возвращает на страницу ошибки авторизации, что мол я не авторизировался и не могу попасть в личный кабинет. Если убрать этот фильтр и за этим маршрутом попробовать вывести данные авторизированного пользователя

$user = Aith::user();
print_r($user);

выводится NULL, т.е. никаких данных нет и пользователя авторизированного тоже нет.

Пробую следующее: захожу по адресу mydomain.ru/laravel/public и появляется главная страница, но на ней не загружены стили и картинки (но это не столь важно в настоящий момент). Опять же пользуюсь формой авторизации и после того, как нажимаю кнопку войти перехожу по маршруту /kabinet и тут то у меня выводится авторизированый пользователь, все его данные необходимые

Ниже код контроллера, который проводит авторизацию

// здесь получили пользователя от модели
if (count($user) != 0) {
            Auth::login($user, true);
            Redirect::to("/kabinet")->with("user", $user);
        } else {
            $this->accessDeniedTime();
            return($this->err_not_found_user);
        }

а это кода роута

Route::get("/kabinet", array("before" => "auth|crsf", "uses" => "NavigationController@login"));

Повторюсь, на домашнем сервере, на котором я имею доступ к файлу httpd.conf и возможность изменения DocumentRoot все работает корректно, эти файлы были просто перенесены на хостинг

Очень буду благодарен за помощь и полезную подсказку

#11 Re: Laravel 4 » Не работает Auth::login() » 28.11.2014 14:03:41

Может кто-нибудь скинуть пример своего htaccess с изменением точки входа в приложение?

#12 Re: Laravel 4 » Не работает Auth::login() » 28.11.2014 14:00:20

Проблем с базой нет. На самом сайте есть модуль, который выводит новости из БД и они отображаются и выбираются от туда. Да и проблем с БД не может быть в принципе, т.к. на домашнем сервере все работает и на хостинге ничего не изменялось в плане кода.

#13 Re: Laravel 4 » Не работает Auth::login() » 28.11.2014 13:41:28

Вот можно немного подробнее с mod_rewrite, именно его я использую для того, чтобы изменить точку входа с  mydomain.ru/laravel/public на mydomain.ru.
Имеем:
2 проекта, один работает на домашнем сервере, другой работает на хостинге, настройки у обоих одинаковые и обращаются к одной и той же БД, которая находится на стороннем сервере, т.е. оба проекта имеют внешний доступ к базе. При использовании домашнего сервера вся авторизация проходит как надо и я могу попасть в личный кабинет.

#14 Laravel 4 » Не работает Auth::login() » 28.11.2014 12:49:59

Himu
Ответов: 9

Проблема собственно в теме: есть проектик, на домашнем сервер все работает хорошо, но после переноса на хостинг не отрабатывает почему аутентификация. При попытке получить данные Auth::user() говорит, что пусто. При выполнении того же кода на домашнем сервере все выдает как надо.
не подскажете в чем может быть проблема или куда рыть? Подозрение есть, что проблема с записью сессии, но при заходе на сайт, сессия создается.

#16 Re: Laravel 4 » Где держать бизнес-логику? » 13.11.2014 12:01:58

Не являюсь гуру программирования, но MVC подразумевает кажется следующее:
M - model - модель - совокупность инструментов для работы с данными/бд (получить, удалить, вставить, изменить и т.д.)
V - view - представление - фасад приложения для пользователя. Служит для отображения страниц пользователю
С - controller - контроллер - совокупность инструментов, которые являются трансфером между моделью и представлением.
Значит по логике фрейморков контроллер только получил данные и отдал модели, а модель уже произвела все действия по фильтрации и т.д.
Но я например не так немного делаю (пускай критикуют меня великие мыслители фреймворков big_smile ): у меня входящие данные от пользователя обрабатывает контроллер, т.е. фильтры, валидаторы, а вот модель только работает с БД (все те операции, которые я описал выше).

#17 Re: Laravel 4 » проблема с установкой laravel » 13.11.2014 11:33:53

наткнулся на интересную статейку по деградации до PHP 5.3.2

http://pektop.net/2014/01/laravel-4-na- … -xostinge/

сам не пробовал, но может поможет

#18 Laravel 4 » Mail::send Ошибка отправки почты » 11.11.2014 13:27:13

Himu
Ответов: 0

Приветствую господа!
Столкнулся с такой проблемой:
Написал небольшой пробный проект на Laravel 4 на локальном ПК. В наличии были: Apache и PHP 5.4
Потом решил все перенести на виртуальный хостинг в Инет
Сначала все было очень плохо с путями, но потом вроде разобрался и сейчас все отображается.
На сайте есть форма регистрации\восстановления пароля и соответственно должны приходить письма, но у меня почему-то генерируется ошибка:

fopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known

Вот код для отправки письма

Mail::send('emails.registration', $data, function ($message) {
                $message->from('my@email.ru', 'from_me');
                $message->to(curren@email.to)->subject('some_subj');
            });

В файле app/config/mail.php в качестве провайдера пробовал и mail и smtp, результат один
Повторюсь на своем сервере все работает и письма отсылаются в обоих случаях
Не подскажите в чем может быть проблема?

#19 Re: Laravel 4 » Сокращение Routes. » 10.10.2014 14:00:35

Спасибо! Как-то не внимательно прочитал доки(

#20 Re: Laravel 4 » Сокращение Routes. » 10.10.2014 13:41:40

в общем сделал как-то так, но все равно не работает(

Route::post("/proc/{needmethod}", "CoreController@navig");

class CoreController extends BaseController{
public function navig($needmethod){
   call_user_func(array($this, $needmethod));
}
public function methodOne(){
   echo "some string for test";
   return View::make("/viewOne");
   echo "second text";
}
  public function methodTwo(){
  // do something
  }
}
}

Какая проблема: если убрать строку <b>echo "some string for text";</b> то вообще ничего не выводится. Если строку оставить то в браузер выводится строка "some string for test" и все. Получается не отрабатывает View. В чем может быть проблема?

если создать маршрут
Route::post("/proc/methodOne", "CoreController@methodOne")

то вся View отработает как надо и все отобразится

#21 Laravel 4 » Сокращение Routes. » 10.10.2014 10:28:26

Himu
Ответов: 3

Приветствую! Такой вопрос:
Есть контроллер, который выполняет работу только с POST запросами. В нем куча методов

class CoreController extends BaseCOntroller{
public function methodOne(){
  // do something
}
  public function methodTwo(){
  // do something
}
}

Хочу сделать какую-нибудь конструкцию уникальную для данного контроллера. Т.е. если route начинается на "/proc", то использовать контроллер CoreController и нужный метод. Придумал вот такое решение:

Route::post("/proc/{neededmethod}", function($needmethod) {
    return Redirect::action("CoreController@$needmethod"); // to needed controller and needed method
});

Но выдает ошибку "Route [CoreController@methodOne] not defined"

когда отправляю запрос по адресу "/proc/methodOne"

Делаю это для того, чтобы не описывать для каждого запроса свой route, уж очень накладно да и не правильно мне кажется

Подвал раздела