Laravel 5.2 Request to action from other controller without js - php

Need send request to controller Category from Wizard.
Wizard action:
$request = Request::create('/admin/category', 'POST', $this->prepare_category($row->toArray()));
Route::dispatch($request);
Category action:
public function store(Request $request, ContentPlugins $plugins)
{
dd(Request::all());
}
The request passes but Request::all() is empty []
dd on $request:
Request {#1922 ▼
#json: null
#userResolver: null
#routeResolver: null
+attributes: ParameterBag {#1859 ▼
#parameters: []
}
+request: ParameterBag {#1726 ▼
#parameters: array:11 [▼
"title" => "Фотосувениры"
"level" => "0"
"description" => null
"cost" => null
"what" => null
"type" => "catalog"
"parent" => 0
"url" => "fotosuveniry-0-0"
"sitemap" => 1
"active" => 1
"position" => 0
]
}
+query: ParameterBag {#1920 ▶}
+server: ServerBag {#1679 ▶}
+files: FileBag {#1728 ▶}
+cookies: ParameterBag {#1727 ▶}
+headers: HeaderBag {#1886 ▶}
#content: null
#languages: null
#charsets: null
#encodings: null
#acceptableContentTypes: null
#pathInfo: null
#requestUri: null
#baseUrl: null
#basePath: null
#method: null
#format: null
#session: null
#locale: null
#defaultLocale: "en"
}
I need to get request->parameters as $_POST on Category.php (Request::all())
How to cause the action of another component and pass it parameters as when submitting the form?
That's what I need from Kohana http://kohanaframework.org/3.3/guide/kohana/requests#external-requests
This uses POST
$request = Request::factory('http://example.com/post_api')- >method(Request::POST)->post(array('foo' => 'bar', 'bar' => 'baz'));

Answer:
Input::merge($this->prepare_category($row->toArray()));
before
$request = Request::create('/admin/category', 'POST');
Route::dispatch($request);

Related

Laravel 8 file upload validation fails with any rule

I want to validate a file upload but with literally any validation rule, I get "The (name of input) failed to upload." I've seen this issue in a few places but none of the solutions worked for me.
I'm using Laravel 8.0, php 8.0.2, and nginx/1.18.0 on ubuntu.
Controller:
public function uploadMedia (Request $request)
{
$request->validate([
'file' => 'required',
'alt' => 'required',
]);
dd('valid');
}
Blade file:
#if($errors->any())
#foreach ($errors->all() as $error)
<p class="alert error">{{ $error }}</p>
#endforeach
#endif
<form method="POST" action="/media" enctype="multipart/form-data">
#csrf
<input type="file" name="file" />
<input type="text" name="alt" placeholder="Write a short description of the image under 160 characters." />
<button type="submit">Upload</button>
</form>
If I get rid of the validation rule for 'file' it works, I get to the dd.
$request->validate([
'file' => '', // works if I do this
'alt' => 'required',
]);
I've seen other people have this issue and I've tried:
Putting another rule (max:10000, image) instead of 'required'
for the file – still get the same error.
Changing the values php.ini to post_max_size = 201M and
upload_max_filesize = 200M (this shouldn't be an issue in the
first place because the image I am trying to upload is a 136kb jpg). Verified with phpinfo();
After changing these values, reloading nginx and php-fpm
Rebooting the VM
Checking that all the double and single quotes are the correct character
Trying to upload other filetypes like png or txt, same error.
Putting 'image' as the first validation rule which worked for someone here
Removing the extra comma at the end of the rules array
Changing the name of the file input to something other than 'file'
Using a different browser (Firefox and Chrome)
Disabling all my browser extensions
Writing the validation like this instead (still get the same error):
$validator = Validator::make($request->all(), [
'file' => 'required',
'alt' => 'required'
]);
if ($validator->fails()) {
return redirect('/media')->withErrors($validator);
}
If I dd($request) before validating:
Illuminate\Http\Request {#44 ▼
#json: null
#convertedFiles: null
#userResolver: Closure($guard = null) {#255 ▶}
#routeResolver: Closure() {#264 ▶}
+attributes: Symfony\Component\HttpFoundation\ParameterBag {#46 ▶}
+request: Symfony\Component\HttpFoundation\ParameterBag {#45 ▼
#parameters: array:2 [▼
"_token" => "RrjAA2YvnSd3EYqg8vAwoWT4y6VenJzGjb5S72SU"
"alt" => "dsfghdf"
]
}
+query: Symfony\Component\HttpFoundation\InputBag {#52 ▶}
+server: Symfony\Component\HttpFoundation\ServerBag {#49 ▶}
+files: Symfony\Component\HttpFoundation\FileBag {#48 ▼
#parameters: array:1 [▼
"file" => Symfony\Component\HttpFoundation\File\UploadedFile {#33 ▼
-test: false
-originalName: "Screen Shot 2021-03-08 at 9.33.19 AM.png"
-mimeType: "application/octet-stream"
-error: 6
path: ""
filename: ""
basename: ""
pathname: ""
extension: ""
realPath: "/var/www/[my domain]/public"
aTime: 1970-01-01 00:00:00
mTime: 1970-01-01 00:00:00
cTime: 1970-01-01 00:00:00
inode: false
size: false
perms: 00
owner: false
group: false
type: false
writable: false
readable: false
executable: false
file: false
dir: false
link: false
}
]
}
+cookies: Symfony\Component\HttpFoundation\InputBag {#47 ▶}
+headers: Symfony\Component\HttpFoundation\HeaderBag {#50 ▶}
#content: null
#languages: null
#charsets: null
#encodings: null
#acceptableContentTypes: null
#pathInfo: "/media"
#requestUri: "/media"
#baseUrl: ""
#basePath: null
#method: "POST"
#format: null
#session: Illuminate\Session\Store {#296 ▶}
#locale: null
#defaultLocale: "en"
-preferredFormat: null
-isHostValid: true
-isForwardedValid: true
-isSafeContentPreferred: null
basePath: ""
format: "html"
}
Error value of 6 means UPLOAD_ERR_NO_TMP_DIR. Ensure that your system has a properly configured upload temp directory by running php -i from command line (or phpinfo(); from a web page) and checking for the upload_tmp_dir key. On a typical Linux system this will be something like /tmp. You can set the value in php.ini if needed. Ensure permissions are correct on the listed folder, such that the web server process is allowed to write to it.
Do not attempt to use one of your publicly-accessible folders as an upload directory (e.g. saving directly to storage/app/public or similar.) Your application code should move the file into storage as described in the documentation; something like this:
public function uploadMedia(Request $request)
{
$request->validate([
'file' => ['required', 'file', 'image'],
'alt' => ['required', 'string'],
]);
$path = $request->file->store('images');
return redirect()->route('whatever')->with('success', "File saved to $path");
}

Laravel Voyager: Translation not working on posts and pages

I'm trying to add ar language to my website but I have a problem the body is not saving it saves <p> </p>
I have the request printed how I receive it when updating a post with 2 languages ar, en.
The request is as this with some dummy text
Request {#57 ▼
#json: null
#convertedFiles: array:2 [▶]
#userResolver: Closure {#1935 ▶}
#routeResolver: Closure {#1994 ▶}
+attributes: ParameterBag {#67 ▶}
+request: ParameterBag {#66 ▼
#parameters: array:17 [▼
"_token" => "LjyJ1cgN5tn7yxFbjyHRPAnRzqRKWg8ojRYM7cMP"
"title_i18n" => "{"en":"Data Services","ar":"خدمة البيانات"}"
"title" => "Data Services"
"body_i18n" => "{"ar":""}"
"body" => """
<pre style="box-sizing: border-box; font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; margin-top: 0px; mar ▶
* Set whether or not the multilingual is supported by the BREAD input.\r\n
*/\r\n
'bread' => true,</code></pre>
"""
"excerpt_i18n" => "{"en":"as ds as d","ar":"as das s dsa"}"
"excerpt" => "as ds as d"
"slug_i18n" => "{"en":"data-services1","ar":"khdmh-albyanat"}"
"slug" => "data-services1"
"status" => "PUBLISHED"
"category_id" => "3"
"meta_description_i18n" => "{"en":"as das dsa d","ar":"asd as dasd a"}"
"meta_description" => "as das dsa d"
"meta_keywords_i18n" => "{"en":"as das","ar":"a sdas "}"
"meta_keywords" => "as das"
"seo_title_i18n" => "{"en":"Design and conduct surveys and measure relevant indicators in all areas","ar":"Design and conduct surveys and measure relevant indicators in all areas"}"
"seo_title" => "Design and conduct surveys and measure relevant indicators in all areas"
]
}
+query: ParameterBag {#65 ▶}
+server: ServerBag {#70 ▶}
+files: FileBag {#69 ▶}
+cookies: ParameterBag {#68 ▶}
+headers: HeaderBag {#71 ▶}
#content: null
#languages: null
#charsets: null
#encodings: null
#acceptableContentTypes: null
#pathInfo: "/admin/posts"
#requestUri: "/admin/posts"
#baseUrl: ""
#basePath: null
#method: "POST"
#format: null
#session: Store {#2051 ▶}
#locale: null
#defaultLocale: "en"
-isHostValid: true
-isForwardedValid: true
basePath: ""
format: "html"
}
My voyager.php for multilanguage config is like this
'multilingual' => [
/*
* Set whether or not the multilingual is supported by the BREAD input.
*/
'bread' => true,
/*
* Set whether or not the multilingual is supported by the BREAD input.
*/
'enabled' => true,
/*
* Set whether or not the admin layout default is RTL.
*/
'rtl' => false,
/*
* Select default language
*/
'default' => 'en',
/*
* Select languages that are supported.
*/
'locales' => [
'en',
'ar',
],
],
What would be the problem?
I searched a lot, finally I tried to solve it by turning around. The solution or let's say the problem here is in this file:
posts/add-edit.blade.php
and if you remove it the bread will work perfectly with default template for posts add-edit. I think this will help a little but I don't know why this issue appear.

Laravel does not see my cookies

I tried to set cookie (easy example):
Route::get('set', function () {
Cookie::queue(Cookie::forever('cart_id', 123));
});
Route::get('get', function (Illuminate\Http\Request $request) {
dump($request);
});
But I get in dump of $request:
Request {#40 ▼
...
+cookies: ParameterBag {#43 ▼
#parameters: array:3 [▼
"cart_id" => null
"XSRF-TOKEN" => null
"laravel_session" => null
]
}
+headers: HeaderBag {#46 ▼
#headers: array:9 [▼
...
"cookie" => array:1 [▼
0 => "cart_id=eyJpdiI6IldNbjJwMHdRclBmWkFkUFJ3SnJ6Z2c9PSIsInZhbHVlIjoiVnhBWGl3ODFBaGhwTCtSc0NoSmlLUT09IiwibWFjIjoiYjU2NjRmNDI4OGQ4NGZmZjNjMDhmYTEwMWJlOWQ2ZjUwYjAxNTMxYjU2OWY3Y2I0NjYxNzQzZTNhZjVkMDcxOSJ9; XSRF-TOKEN=eyJpdiI6Ino2ckNVSU5cL3VEcE5VQWRqQm1wTkV3PT0iLCJ2YWx1ZSI6IkF2b1Y0VDFkMlVqam8zeWVJQk55Mm96XC9PZFlyZUxma3FBTXNBV2VoK3AyTkp5Q2RNOHZtQnRyMFB0a3c0Mm5cL1hJdkkyY1haUHhZV0FEejdKSjMzaHc9PSIsIm1hYyI6IjFlNjVkZDE2NDJiYjA2MDQzM2JiYWYzMWY2YWRiNTk0ZDM4MjBlNmEzZmEwNTUxZWUzY2NmYmEyZDljMmYwOGIifQ%3D%3D; laravel_session=eyJpdiI6Imh1QW1iamlscnVpV3JFTThHYWdTNkE9PSIsInZhbHVlIjoiZElUMU1MZlRwa1BRZFd6T0pWMGhSanNCcmVNcjdEUGJrd2Zhc3RqbFUzVFBOamxsclBnbWhHcVk4QXFXU2VFMkVGYXBUSm4xVVFvcGZoZnVxN1VTVnc9PSIsIm1hYyI6IjkyYjA5YTI3MmE3MWE5OWRhNDBjYWZkZjQwZjk0NjI1OTY4MGNjZDM4ZDQ4YWE3YjdkMWMxNmQwZjgxMzQzZTYifQ%3D%3D"
]
]
#cacheControl: array:1 [▶]
}
}
Of course, firstly I go to /set link, then /get.
Where did I go wrong? Why all of my cookies equals to null?
By the way, last 5 hours I tried to make a function, that will contains Cookie::queue() function, but it goes wrong too. I dont know, what's wrong with my laravel cookies

Laravel relation data with first() method

Vender hasMany Banquet
Here is my query:
$banquet = Vendor::with(['banquet' => function($query){
$query->where('active',1)->where('id' ,1)->first();
}])->findOrfail(1);
but the relation part return an collection like get() method not first()
#relations: array:1 [▼
"banquet" => Collection {#283 ▼
#items: array:1 [▼
0 => Banquet {#285 ▼
How to trans like this? So that I can just get the banquet data like $vendor->banquet not $vendor->banquet[0]
#relations: array:1 [▼
"banquet" => Banquet {#285 ▼
I think, you are using OneToMany for banquet.
So, you are getting in the collection/array.
Please, try it as OneToOne. and say if you get any change or not.
return $this->belongsTo();
in banquet method.
or
return $this->hasOne();

Laravel Method Injection - Variable exists?

Let's say that we have Laravel's default User.php model, and we also have UsersController.php. Here's how the create method looks like:
public function create(User $user)
{
return view('backend.users.form', compact('user'));
}
As you can see - User $user is passed as argument, and view backend.users.form receives that $user.
If I add dd($user); in the create method:
public function create(User $user)
{
dd($user);
return view('backend.users.form', compact('user'));
}
the result will be:
User {#193 ▼
#fillable: array:3 [▼
0 => "name"
1 => "email"
2 => "password"
]
#hidden: array:2 [▼
0 => "password"
1 => "remember_token"
]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: []
#original: []
#relations: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#dates: []
#dateFormat: null
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: false
+wasRecentlyCreated: false
}
So, variable (instance) $user exists, right?
But, in a view backend.users.form that receives $user, if we do something like this:
<h3>{!! $user->exists ? 'Editing '.$user->name : 'Create New User' !!}</h3>
The result will be as if $user does not exist? The result will be Create New User. I do not understand it.
Can you explain to me why $user->exists returns false when dd($user); shows that it exists?
Without knowing your DI-container configuration, the User instance you inject probably does not exist as a record in the database - it has no identity. It is merely a model instance you can use.
Can you explain to me why $user->exists returns false when dd($user);
shows that it exists?
Please look carefully at the result of dd() inside a controller:
...
+exists: false
...
$user->exists is false here, so it will return false in any case.

Categories